23

我正在对我们的网站进行一些冒烟测试。

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

Given I'm on the homepage

Then I should see "Welcome To The Site"

我错过了什么吗?没有时间是否“可以”?

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

4

6 回答 6

26

省略 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()
{
     ...
于 2012-01-27T11:29:32.887 回答
18

我认为你真的错过了这里的重点。你总是需要一个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 几乎没有价值。

于 2014-10-06T15:43:07.667 回答
1

我倾向于将 Given 视为传统前提条件的等价物。当作为等效的测试动作。然后作为预期结果的等价物。

因此,如果没有先决条件,我会省略 Given,而只关注 When 和 Then:

When I'm on the homepage
Then I should see "Welcome To The Site"

Specflow 将允许您使用 Given 或 When,但 Visual Studio 也将允许您编写一个 1000 行长的类。仅仅因为两者都是可能的,并不意味着任何一个都是“正确的”。

于 2017-07-05T07:26:02.850 回答
0

为线程复活道歉...

我可能会选择:

Given there is a homepage
When I view the homepage
Then I should see "Welcome To The Site"

我喜欢至少保留一个Given,When并且Then在每个中Scenario- 不要忘记您也可以使用Andand But(并不是说它们与这种情况特别相关)。您甚至可以使用*.

于 2012-05-25T16:09:49.037 回答
-2

我会说:

Given I have requested the home page
When the home page loads
Then I should see 'Welcome To The Site'
于 2016-06-09T13:46:14.023 回答
-3

您不需要何时。我喜欢考虑 Given/When/Then 关键字,例如

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

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

于 2012-01-30T03:47:26.263 回答