C# 给定/何时/然后-我可以使用“给定”吗;声明;在多个操作中,表示给定,并且当两者同时存在时

C# 给定/何时/然后-我可以使用“给定”吗;声明;在多个操作中,表示给定,并且当两者同时存在时,c#,automation,bdd,acceptance-testing,gherkin,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 op

假设我得到了给定步骤的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+空格键)以这种方式编写,但如果我尝试导航,它只会导航到“当用户以管理员身份登录时”

它只导航到您写入的最后一个值[给定,当(“…”)]。在这里,它导航到何时

在某些情况下,我如何使其适用于这两种语句

管理员登录语句是一个先决条件,但在某些情况下

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

有没有什么方法可以让我在什么时候使用相同的语句


提前感谢

首先,我想检查一下您是否真的需要“何时”

如果您实际上没有编写自定义登录功能,请考虑删除“何时”的场景。登录,一经编写,很少更改,并且很容易与其他功能分离。手动测试它,然后让它单独运行。不过,可以使用该功能为其他场景设置登录帐户

如果您将登录步骤作为更大的步骤的一部分使用,并且有多个When,那么您可能希望找到一种方法,将您尝试执行的操作表述为一个步骤,并在其中调用登录步骤。通常情况下,场景只有一个

如果两者都不适用,那么,好吧,您需要一个用户主动登录的场景。登录的行为很有趣,您想提供一个示例

从语言学的角度来看,我不想看到一个给定的短语和一个When的相同

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

但是,当操作处于活动状态时。某人或某事正在执行一项活动。用户登录

所以,我更愿意看到:

[Given(@"User is logged in as an adminstrator")]
[When(@"User logs in as administrator")] 
public void abc(){
    //my operation
}
以及与之匹配的步骤。这仍然允许您暂时重用您的功能,但它也为您提供了以后将它们分开的选项。例如,如果登录是一个昂贵的步骤,并且您决定在所有这些场景中重新使用登录帐户,而在这些场景中,登录帐户只是一个给定的帐户,那么这一点可能很重要


@@Lunivore。。。我知道如果我们用同样的台词,我们可能听起来有点奇怪。。不过登录只是为了表达一个问题。。我找到了我要找的东西。。谢谢