2016-07-26 118 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