Specflow:步骤的基类

Lin*_*ela 5 c# testing bdd specifications specflow

我有一个奇怪的例子,执行顺序混乱

我为所有步骤定义创建了一个基类

public abstract class BaseSteps
{

    static BaseSteps()
    {
        Console.WriteLine("static Constructor");
    }

    protected BaseSteps()
    {
        Console.WriteLine("public Constructor");
    }


    [BeforeTestRun]
    public static void BeforeTestRun()
    {
        Console.WriteLine("static void BeforeTestRun");
    }

    [AfterTestRun]
    public static void AfterTestRun()
    {
        Console.WriteLine("static void AfterTestRun");
    }

    [Before]
    public static void Before()
    {
        Console.WriteLine("Base Before Scenario");
    }


}



 [Binding]
    public class SpecFlowFeature1Steps: BaseSteps
    {
    public SpecFlowFeature1Steps()
    {

    }
    [BeforeScenario()]
    public void Setup()
    {

    }
Run Code Online (Sandbox Code Playgroud)

但奇怪的是,我的调试模式下的执行顺序看起来像这样

  1. 基类静态构造函数
  2. [测试运行之前]
  3. 基类构造函数
  4. 子类构造函数
  5. 子类[BeforeScenario]
  6. 基类 [BeforeScenario] ....

我原以为它会像...

  1. 基类[BeforeScenario]
  2. 基础构造函数
  3. 子类构造函数
  4. 子类[BeforeScenario]

...

知道为什么会这样吗?

TIA

Sam*_*der 0

在 Specflow 中,所有步骤都是全局的,因此无需将步骤放入基类中,如果这样做会导致问题,因为这些步骤存在于每个子类中。

解决方案是让您的SpecFlowFeature1Steps类不继承BaseSteps或将实际步骤移动到BaseSteps另一个类中(如果基本步骤包含您想要使用的一些基本功能 - 但如果可能的话我会避免这种情况)

你不能按照你想要的方式依赖或排序钩子。正确的做法是使用Order 属性