Specflow:步骤的基类

时间:2016-07-26 00:44:58

标签: 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()
    {

    }

但是我的调试模式的执行顺序看起来很像这个

  1. 基类静态构造函数
  2. [BeforeTestRun]
  3. 基类构造函数
  4. 子类构造函数
  5. 儿童班[BeforeScenario]
  6. 基类[BeforeScenario] ....
  7. 我原以为它就像 ...

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

      知道为什么这样做会这样吗?

      TIA

2 个答案:

答案 0 :(得分:2)

正如Sam解释的那样,步骤定义/ hooks / step参数转换是全局的,因此您不需要基类来共享逻辑。我前段时间写了一篇文章,详细说明了这一点:http://gasparnagy.com/2015/05/specflow-tips-problems-with-placing-step-definitions-to-base-classes/

答案 1 :(得分:0)

在specflow中,所有步骤都是全局的,因此不需要在基类中添加步骤,如果这样做会导致问题,因为每个子类中都存在步骤。

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

你不能以你想要的方式依赖或订购钩子。正确的方法是使用Order attribute