鉴于何时测试 - 我需要“何时”?

时间:2012-01-27 10:49:23

标签: bdd specflow user-stories smoke-testing

我正在对我们的网站实施一些烟雾测试。

我正在使用Given / When / Then格式进行现有的自动验收测试/用户故事。但现在我想做一个初步的烟雾测试:

Given I'm on the homepage

Then I should see "Welcome To The Site"

我错过了什么吗?没有When?

是否“没问题”

使用的工具:MVC3,SpecFlow,Nunit,Watin

6 个答案:

答案 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至少保留一个WhenThenScenario - 不要忘记您也可以使用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关键字

给定 - 这是一个准备步骤,做任何你需要能够执行测试的事情 何时 - 这应该是您的测试将验证的操作。 然后 - 这应该是您根据在步骤中执行的操作验证测试的位置。

如前所述,它们只影响执行顺序。