我正在对我们的网站实施一些烟雾测试。
我正在使用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 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
发生所必须存在的所有事情。在你的情况下,似乎没有任何初始状态。但请考虑一下您是否有一些Web应用程序。在访问主页之前,您需要具有初始状态(您需要确保用户已登录);
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 there is a homepage
When I view the homepage
Then I should see "Welcome To The Site"
我想在每个Given
中保留至少一个When
,Then
和Scenario
- 不要忘记你也可以使用And
和But
(并不是说它们与这种情况特别相关)。你甚至可以用*
制作一个子弹点样式列表。
我会说:
Given I have requested the home page
When the home page loads
Then I should see 'Welcome To The Site'
我倾向于将Given视为传统先决条件的等价物。当作为测试动作的等价物时。然后作为预期结果的等价物。
因此,如果没有前置条件,我会忽略给定,只关注When和Then:
When I'm on the homepage
Then I should see "Welcome To The Site"
Specflow将允许您使用Given或When,但Visual Studio还允许您编写1000个行长的单个类。仅仅因为两者都是可能的,并不意味着两者都是“正确的”。
你不需要什么时候。我喜欢想像Given / When / Then这样的关键词
给定 - 这是一个准备步骤,做任何你需要能够执行测试的事情 - 这应该是你的测试将验证的动作。然后 - 这应该是您根据在When步骤中执行的操作验证测试的位置。
如前所述,它们只会影响执行顺序。