2016-07-26 120 views
2

我在那里执行的顺序弄乱了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] ....

我期待它像 ...

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

...

知道为什么这这样的行为?

TIA

回答

0

在specflow所有步骤都是全球性的,因此没有必要把一个基类的步骤,如果你这样做会导致一些问题的步骤,然后在每个子类中存在。

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

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