SpecFlow - 多个BeforeScenario方法的排序

mar*_*c_s 11 testing specflow

我正熟悉SpecFlow,我真的非常喜欢它.

除了一些棘手的问题......比如功能和场景设置代码.

在一个名为"通用"的文件中InfrastructureSteps.cs,我有一个应该为每个场景运行的常规设置代码 - 所以我的方法看起来像这样:

[BeforeScenario]
public void SetupDbContext()
{
    // define some basic stuff, set up a database transaction context etc.
}
Run Code Online (Sandbox Code Playgroud)

这需要在每个场景之前运行,到目前为止,它已经运行得很好.

但是现在,我在测试特定的步骤文件中有两个场景,在运行之前还需要相当广泛的设置.所以我.feature用标签标记了他们的场景:

@needs_extra_setup
Scenario: .....
   Given .....
   When .....
   Then ......
Run Code Online (Sandbox Code Playgroud)

并实现了特定于测试的BeforeScenario设置方法:

[BeforeScenario("needs_extra_setup")]
public void DoExtraSetupForMyScenario()
{
   // do stuff
}
Run Code Online (Sandbox Code Playgroud)

它可以工作 - 它被调用 - 但是在调用通用方法之前[BeforeScenario]调用它:-(因此它失败了 - 在通用设置方法中设置的东西不存在并导致我的代码失败.

那么在SpecFlow中有什么方法可以对这些[BeforeScenario]方法进行排序吗?或者我可以告诉一个特定的[BeforeScenario]方法来首先执行"基础" [BeforeScenario]方法,如在overriden方法中调用基本方法?

当然,我可以[BeforeScenario]明确地称之为"基础" 方法 - 但这看起来有点像大锤方法......

有任何想法吗?思考?指针?

Mar*_*erg 7

我很确定你可以(也可能不应该)订购场景的执行顺序.

但是你可以使用其他一些钩子,比如BeforeFeature,也许可以这样解决它.

另一种方法是只需要一个标志来检查是否已经在特定的东西中设置了常规内容,调用SetupDbContext方法(或者最好是SetupDbContext依次调用的东西).

使用ScenarioContext.Current字典存储标志.

我希望你发现这很有帮助