As a user,
I want to register on the system,
so that I can use its services
Scenario: user successfully register
Given an register page
And an un-registered user
When the user fills username "Jeff" and password "123456"
And click on "Register"
Then the user can see a "Success" message
And the user "Jeff" is created in the system
import cucumber.api.java.en.Given;
public class Stepdefs {
@Given("an register page")
public void an_register_page throws Throwable {
// ...
}
@Given("an un-registered user")
public void an_register_page throws Throwable {
// ...
}
// ...
}
但我很快就发现自己陷入了困境:有页面、模型,也许数据库需要这种场景,似乎有很多事情要做。
我现在该怎么办?我是否需要与所有涉众讨论此方案?对于ba/customer/qa
,我不认为他们真的关心实现,与其他开发人员讨论一下是不是一个好主意?
假设在我与其他一些开发人员讨论之后,我们同意将其拆分为几个小的部分。我们是否可以用scenario/gived/when/then
格式使这些小部件成为“scenario”,就像我们刚才对cucumber-jvm所做的那样,或者我们是否可以像在TDD中通常所做的那样使用JUnit?
1. If choose "cucumber-jvm", it seems a little heavy for small part
2. If choose JUnit, we need to involve more than one testing framework in a project
3. Is it the best if there is a single testing framework to do both things (not sure if there is)
假设我选择选项2
,将JUnit用于小任务
以下是我在这个决定之后要做的事情:
现在我们创建新的小型测试来驱动实现,比如在数据库中创建用户,就像我们通常在TDD中所做的那样。(红色->绿色->重构)。我们不关心cucumber测试场景:用户成功注册
(失败了),暂时把它留在那里。对吧?
>
不要从登录开始;从与其他系统不同的东西开始。为什么有人登录?他们为什么要使用这项服务?硬编码一个用户,假装他们已经登录,关注值。
如果您专注于UI细节,那么您就会非常强烈地将自己与UI绑定在一起,这使得UI很难更改。取而代之的是,看看系统正在交付什么功能。我并不推荐使用登录场景,但如果我使用了,我希望它看起来更像:
Given Jeff isn't registered with the site
When he registers with the username "Jeff" and password "123456"
Then his account creation should be confirmed
And he should be invited to log in for the first time.
在这里查阅“声明式vs.命令式”,了解更多关于这方面的内容。
BDD最初的目的是去掉“测试”这个词,因为它会让人们把TDD这样的东西看成是关于测试的。TDD实际上是关于干净的设计;理解代码的职责和行为,就像场景帮助您理解系统的功能和行为一样。同时编写系统级场景和类级测试应该是正常的。
但是,您已经领先于那些在开始编码之前忘记讨论场景的人了!与利益相关者的对话是最重要的部分。在这些对话中加入测试人员可能会有价值。测试人员非常擅长于发现其他人错过的场景。
看起来你在其他的过程中已经走上了正确的轨道。你可能会在我的个人资料中发现一些其他的BDD答案对你也有帮助。恭喜你,祝你好运!
本文向大家介绍java初学者必须理解这几个问题,包括了java初学者必须理解这几个问题的使用技巧和注意事项,需要的朋友参考一下 关于这个系列里的问题,每个学Java的人都应该搞懂。当然,若是仅仅学Java玩玩就无所谓了。若是你以为本人现已逾越初学者了,却不很懂这些问题,请将你本人重归初学者队伍。 问题一:我声明晰什么! String s = "Hello world!"; 许多人都做过这样的事情,
目标是electron与go服务程序的互相通信 比如用go处理一些文件,通过grpc通信在界面上显示进度 目前我已跑通官网的示例: https://grpc.io/docs/languages/go/quickstart/ 但有几个问题不是很明朗: 互相通信是不是需要go与node各开一个服务端与客户端? 我不能跳过node直接做到go与electron通信是吗? 我不是纯web,所以我不需要gr
本教程的主要内容是介绍如何使用 jMonkeyEngine 进行游戏开发,旨在帮助初学者快速理解 jMonkeyEngine 中的核心概念。由于作者本人水品有限,文中难以避免出现谬误,如您在阅读过程中发现有不对的地方,请告知本人,我会尽快修正。 jME3 官方网站: 官网: http://jmonkeyengine.org/ 论坛: https://hub.jmonkeyengine.org Gi
本文向大家介绍Java初学者常问的问题(推荐),包括了Java初学者常问的问题(推荐)的使用技巧和注意事项,需要的朋友参考一下 本文介绍一些Java初学者常问的问题,可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需要花费大量时间? 为什么Java库不用随机pivot方式的快速排序? 基本数据类型 Q. 为什么 -0/3 结果是 0,而 -0.0
是否有运行各种docker项目的机器。每个docker容器都会在生成系统中出现新版本时定期更换/停止/启动。 这种机器的备份概念是什么样子的? 研究类似的问题[1]我现在还不清楚备份/恢复过程的正确路径。我目前的理解是: 备份 使用脚本创建图像和容器。在您喜爱的版本控制系统中存储/备份脚本。使用版本标签来提取docker图像。不要使用最新标签 恢复 确保所有命名卷都已恢复原位 [1] 如何备份Do
问题内容: 我知道数组运算符具有优先权。然后是二元算术运算符*,/,%。然后+和-优先级较低。 但是我很困惑在这个示例中哪个人会首先解决Java。并且如果我们有2个具有相同优先级的运算符,那么Java中将首先使用哪个运算符? 谢谢。 如果有人可以为我解决这个问题并向我部分解释。因为这总是使我困惑于考试。 问题答案: 如果运算符具有相同的优先级,则从左到右对其进行求值。 从教程: 当相同优先级的运算