给定/当/然后 - 我可以在多个操作中使用给定的“语句”,表示给定和当两者都有

时间:2016-01-06 10:46:47

标签: c# automation bdd acceptance-testing gherkin

假设我得到了带有给定步骤的BDD特征文件,

Given User is logged in as administrator
When some functionality line
Then some functionality line

并且我想使用“用户以管理员身份登录”作为其他场景中的When语句我该怎么做..

我尝试写作,

[Given,When(@"User is logged in as administrator")] 
public void abc(){
//my operation
}

specflow允许我使用(cntrl + spacebar)以这种方式编写,但是如果我尝试导航它只导航到“当用户以管理员身份登录”时

它只导航到你写的最后一个值[Given,When(“..”)]。在这里,它导航到When ..

在某些情况下,我怎样才能使它适用于这两种语句

管理员登录声明是预先要求的,但在某些情况下,

我必须登录,这是我需要执行的操作,因此还需要编写与“When”语句相同的语句

有什么方法可以使用与Given和When ??

相同的语句

提前致谢

1 个答案:

答案 0 :(得分:1)

首先,我想确定你真的需要“何时”。

如果您实际上没有编写自定义登录功能,请考虑完全删除“When”方案。登录后,一旦编写,很少更改,并且很容易与其他功能分开。手动测试然后不管它。可以使用该功能为其他方案设置登录帐户。

如果你使用登录步骤作为更大的东西的一部分,有多个Whens,你可能想找到一种方法来表达你想要做的事情作为一步,并在步骤内调用记录那。一般情况下只有一个时间。

如果这些都不适用,那么,好吧,你需要一个用户主动登录的场景。登录的行为很有意思,你想提供一个例子。

从语言学的角度来看,我不希望看到同样的措词,就像我对于何时一样。

给定的想法是,你到达那里并不重要。对于场景,这种行为并不重要。该步骤描述了存在的上下文。用户已登录。他们是如何登录的?谁知道?谁在乎?这并不重要。

但是,对于When,操作处于活动状态。有人或某事正在表演一个事件。用户登录

所以,我更愿意看到这个:

[Given(@"User is logged in as an adminstrator")]
[When(@"User logs in as administrator")] 
public void abc(){
    //my operation
}

以及与之匹配的步骤。这仍然允许您暂时重用您的功能,但它也为您提供了以后分离它们的选项。例如,如果登录结果是一个昂贵的步骤并且您决定重新使用已登录的帐户来处理它仅仅是给定的所有场景,那么这可能很重要。

More on English tenses and BDD here.