2016-07-26 8 views
2

ich ein sonderbares Fällen, wo die Reihenfolge der Ausführung verkorkste istSpecflow: Basisklasse für Schritte

ich eine Basisklasse für alle meine Schritte Definition erstellt haben

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() 
    { 

    } 

Aber es ist seltsam, dass die Reihenfolge der Ausführung auf meine Debug-Modus sieht wie folgt aus

  1. Basisklasse statische Konstruktor
  2. [BeforeTestRun]
  3. Basisklassenkonstruktor
  4. Child Klassenkonstruktors
  5. Child-Klasse [BeforeScenario]
  6. Basisklasse [BeforeScenario] ....

ich es erwartet hatte wie zu sein ...

  1. Basisklasse [BeforeScenario]
  2. Basiskonstruktor
  3. Kinder Klassenkonstruktors
  4. Child-Klasse [BeforeScenario]

...

Jede Idee, warum diese sich so verhalten?

TIA

Antwort

0

In specflow alle Schritte sind global, daher besteht keine Notwendigkeit, Schritte in einer Basisklasse zu setzen, und wenn Sie dies tun, werden Probleme wie die Schritte verursachen existieren dann in jedem Kind Klasse.

Die Lösung ist auf Ihre SpecFlowFeature1Steps Klasse machen nicht die BaseSteps erben oder die tatsächlichen Schritte in BaseSteps in eine andere Klasse zu bewegen (wenn die Basisschritte eine Basisfunktionalität enthält, die Sie verwenden möchten - aber ich würde dies zu vermeiden, wenn möglich)

Sie können sich nicht verlassen oder Hooks auf die Weise bestellen, wie Sie möchten. Der richtige Ansatz besteht darin, die Order attribute

Verwandte Themen