我正在我们的网站上进行一些烟雾测试。
我对现有的自动化验收测试/用户故事使用Given/When/Then格式。但现在我想做一个初步的烟雾测试:
Given I'm on the homepage
Then I should see "Welcome To The Site"
我是不是错过了什么?没有"何时"可以吗?
使用的工具:MVC3、SpecFlow、Nunit、Watin
省略Given、When或Then中的任何一个都是完全有效的语法(甚至可以按任何顺序混合它们-specflow不在乎。)
然而,为了可读性的目的,而不是省略When I经常改写Given,即
When I view the homepage
Then I should see "Welcome To The Site"
我更喜欢省略Given部分,因为When应该指示测试的动作是什么
如果步骤绑定的代码是相同的,并且您希望重用它,那么您可以始终将您的给定时间和我的时间绑定到相同的方法。
[Given(@"I'm on the homepage"]
[When(@"I view the homepage"]
public void NavigateToHomePage()
{
...
我认为您真的没有抓住要点。您总是需要When
。这就是你应该测试的东西!你可以省略的是Givens
你应该说的是;
When I visit the homepage
Then I should see "Welcome To The Site"
Given When Then
实际上是表示状态机的一种更好的方式。
Given some initial state // in your case, non
When I perform some action // in your case, visiting the homepage
Then I have some final state // in your case, text displayed to a user
我喜欢做的是思考所有必须存在的事情,才能让When
发生。在你的情况下,似乎没有任何初始状态。但是考虑一下你是否有一些网络应用程序。在访问主页之前,你需要有一个初始状态(你需要确保用户已经登录);
Given a user // user must be stored in the database
And the user is logged in // a logged in user must be in the session
When the user visits their homepage
Then the user should see "Welcome To Your Homepage"
另一种情况是:;
Given no logged in user // some people would leave this Given out, but I add it for completness
When a user visits their homepage
Then the user should be redirect to the login page
正如有人正确指出的那样,大多数BDD工具实际上并没有区分Given When Then
,但你应该!"Given When Then"的冗长本质被选择为我们人类更容易理解,并有助于我们的思维过程。机器根本不在乎你所说的台阶。在这种情况下,你应该尽一切努力在任何时候都正确使用关键词。
附加
BDD结构与具有排列、动作、断言的精心设置的测试没有什么不同。
不过,BDD的好处是它为测试提供了一个详细的结构。这有助于开发人员与产品所有者进行适合领域的对话-行为驱动开发。
如果您没有进行这些对话,那么使用BDD与常规测试实践相比几乎没有什么价值。
我倾向于将Given视为传统先决条件的等价物。当作为测试动作的等价物时。然后作为预期结果的等价物。
因此,如果没有先决条件,我会省略Given,只关注When and Then:
When I'm on the homepage
Then I should see "Welcome To The Site"
Specflow允许您使用Given或When,但Visual Studio也允许您编写一个1000行长的类。仅仅因为两者都有可能,并不意味着两者都是"正确的"。
为线程复活道歉。。。
我可能会选择:
Given there is a homepage
When I view the homepage
Then I should see "Welcome To The Site"
我喜欢在每个Scenario
中至少保留一个Given
、When
和Then
——别忘了你也可以使用And
和But
(并不是说它们与这个场景特别相关)。您甚至可以使用*
创建一个项目符号样式列表。
我会说:
Given I have requested the home page
When the home page loads
Then I should see 'Welcome To The Site'
您不需要When。我喜欢Given/When/Then关键字的想法,比如
给定-这是一个准备步骤,做任何你需要的事情来执行测试何时-这应该是您的测试将验证的操作。然后-这应该是您根据When步骤中执行的操作验证测试的地方。
如前所述,它们只影响执行顺序。