【发布时间】:2015-11-29 15:29:09
【问题描述】:
这几天我读了几篇关于BDD 的文章,想知道它在说什么。现在我有了一个基本的了解,但还不清楚整个过程。
以下是我认为在 BDD 流程中应该做的事情:
-
所有利益相关者(BA、客户、开发人员、QA)坐在一起讨论需求,并将商定的功能写在故事卡上。这里我以“用户注册”功能为例:
As a user, I want to register on the system, so that I can use its services -
创建几个
Given/When/Then格式的场景,这里是其中之一: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 -
用一些 BDD 测试框架来实现这个场景,比如cucumber-jvm,比如:
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/Given/When/Then 格式的“场景”,就像我们刚刚在 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 中所做的那样。 (红色->绿色->重构)。我们暂时不关心黄瓜测试
Scenario: user successfully register(失败),把它留在那里。对吧?我们使用 JUnit 开发了更多小测试,将它们设置为红色 -> 绿色 -> 重构。 (而且不完整的黄瓜测试总是失败)
直到所有小测试都通过,我们转向黄瓜测试
Scenario: user successfully register。完成它并确保它最后变成绿色。现在再开发一个场景,如果简单的话,我们可以只用cucumber来实现,不然就得拆分写几个jUnit测试
肯定有很多误解,即使是非常基本的。因为除了“与所有利益相关者讨论”部分之外,我没有发现自己从 BDD 中获得太多价值。
我的错误在哪里?感谢您的任何建议!
【问题讨论】:
标签: junit cucumber bdd scenarios