给定何时进行测试 - 我需要"When"吗?



我正在我们的网站上进行一些烟雾测试。

我对现有的自动化验收测试/用户故事使用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中至少保留一个GivenWhenThen——别忘了你也可以使用AndBut(并不是说它们与这个场景特别相关)。您甚至可以使用*创建一个项目符号样式列表。

我会说:

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步骤中执行的操作验证测试的地方。

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

相关内容

  • 没有找到相关文章

最新更新