我正在对我们的网站实施一些烟雾测试。
我正在使用Given / When / Then格式进行现有的自动验收测试/用户故事。但现在我想做一个初步的烟雾测试:
Given I'm on the homepage
Then I should see "Welcome To The Site"
我错过了什么吗?没有When?
是否“没问题”使用的工具:MVC3,SpecFlow,Nunit,Watin
答案 0 :(得分:20)
完全有效的语法省略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()
{
...
答案 1 :(得分:14)
我认为你真的错过了这一点。您总是需要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
,但你应该这样做!选择'给予当时'的冗长性质使我们人类更容易理解并帮助我们的思维过程。一台机器不在乎你所谓的步骤。在这种情况下,您应该尽一切努力在任何时候正确使用关键字。
答案 2 :(得分:-1)
线程复活的道歉...
我可能已经离开了:
Given there is a homepage
When I view the homepage
Then I should see "Welcome To The Site"
我希望每个Given
至少保留一个When
,Then
和Scenario
- 不要忘记您也可以使用And
和{ {1}}(并不是说它们与这种情况特别相关)。您甚至可以使用But
创建一个项目符号样式列表。
答案 3 :(得分:-1)
我会说:
Given I have requested the home page
When the home page loads
Then I should see 'Welcome To The Site'
答案 4 :(得分:-1)
我倾向于将Given视为传统先决条件的等同物。当作为测试动作的等价物时。然后作为预期结果的等价物。
因此,如果没有前提条件,我会忽略给定,只关注时间和然后:
When I'm on the homepage
Then I should see "Welcome To The Site"
Specflow将允许您使用Given或When,但Visual Studio也允许您编写一个长1000行的类。仅仅因为两者都是可能的,并不意味着两者都是'正确'。
答案 5 :(得分:-2)
你不需要什么时候。我喜欢想像
这样的Given / When / Then关键字给定 - 这是一个准备步骤,做任何你需要能够执行测试的事情 何时 - 这应该是您的测试将验证的操作。 然后 - 这应该是您根据在步骤中执行的操作验证测试的位置。
如前所述,它们只影响执行顺序。