鉴于何时测试 - 我需要"何时"?

Dan*_*ack 17 bdd user-stories smoke-testing specflow

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

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

Given I'm on the homepage

Then I should see "Welcome To The Site"

我错过了什么吗?没有什么时候"好"吗?

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

per*_*ist 21

省略Given,When或Then中的任何一个是完全有效的语法(甚至以任何顺序混合它们 - specflow不关心.)

但是,出于可读性的目的,而不是省略当我经常改写给定,即

When I view the homepage
Then I should see "Welcome To The Site"
Run Code Online (Sandbox Code Playgroud)

我更喜欢省略Given部分,因为When应该指示测试的操作是什么.

如果步骤绑定的代码相同并且您想要重复使用它,则始终可以将给定的和我的时间绑定到相同的方法.

[Given(@"I'm on the homepage"]
[When(@"I view the homepage"]
public void NavigateToHomePage()
{
     ...
Run Code Online (Sandbox Code Playgroud)


Gaz*_*dge 14

我想你真的错过了这一点.你总是需要一个When.那是你应该测试的东西!你可以遗漏的是Givens

你应该说的是;

When I visit the homepage
Then I should see "Welcome To The Site"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我喜欢做的是考虑必须存在的所有事情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"
Run Code Online (Sandbox Code Playgroud)

另一种情况是;

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
Run Code Online (Sandbox Code Playgroud)

正如有人正确指出的那样,大多数BDD工具实际上并没有区分,Given When Then但你应该这样做!选择'给予当时'的冗长性质使我们人类更容易理解并帮助我们的思维过程.一台机器不在乎你所谓的步骤.在这种情况下,您应该尽一切努力正确使用关键字.