Given/When/Then - 我可以在多个操作中使用 Given "statement" 吗?比如 Given 和 When both

Given/When/Then - Can I use a Given "statement" in more than one operation say Given and When both

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

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

我想在其他一些情况下将 "User is logged in as administrator" 用作 When 语句我该怎么做..

我试过写,

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

specflow 允许我使用 (cntrl+spacebar) 以这种方式编写,但如果我尝试导航,它只会导航到 "When User is logged in as administrator"

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

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

管理员已登录声明是先决条件,但在某些情况下,

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

有什么方法可以使用与 Given 和 When 相同的语句吗??

提前致谢

首先,我想确认一下您是否真的需要 "When"。

如果您实际上并不是在编写自定义 logging-in 功能,请考虑完全删除 "When" 方案。登录,一旦编写,很少更改,并且很容易与其他功能分离。手动测试它然后别管它。不过,可以使用该功能为其他情况设置 logged-in 帐户。

如果您将登录步骤用作更大的事物的一部分,有多个时间,您可能想找到一种方法来将您尝试做的事情作为一个步骤来表达,并调用登录踏入其中。一般场景只有一个 When.

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

从语言学的角度来看,我不希望看到 Given 的措辞与 When 的措辞相同。

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

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

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

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

连同与之匹配的步骤。这仍然可以让您暂时重用您的功能,但它也让您可以选择稍后将它们分开。这可能很重要,例如,如果登录被证明是一个昂贵的步骤,并且您决定要在所有这些场景中重用一个 logged-in 帐户,其中它只是一个 Given。

More on English tenses and BDD here.