2017-06-07 15 views
0
public class BaseSteps : Steps 
{ 
    [BeforeFeature] 
    public static void BeforeFeatureStep() 
    { 
     var otherStep = new OtherStep(); 
     otherStep.ExecuteStep(); 
    } 
} 

public class OtherStep : Steps 
{ 
    public void ExecuteStep() 
    { 
     var key = 'key'; 
     var val = 'val'; 
     this.FeatureContext.Add(key, val); 
    } 
} 

これはサンプルスニペットです。 this.FeatureContext.Add()にアクセスしようとすると、例外が発生します。Container of the steps class has not been initializedSpecflowステップクラスのコンテナが初期化されていません

これについての助けに感謝します。

答えて

0

ステップクラスがSpecFlow DIコンテナによって解決されないため、FeatureContextは初期化されません。したがって、SetObjectContainer-メソッドは呼び出されません(https://github.com/techtalk/SpecFlow/blob/master/TechTalk.SpecFlow/Steps.cs#L10

一般的には、階級を自分でインスタンス化するのではなく、コンテキスト注入(http://specflow.org/documentation/Context-Injection/)で取得する必要があります。

あなたがBeforeFeatureフックにいるため、これはあなたのケースでは不可能です。

可能な解決策は、SpecFlow(https://www.nuget.org/packages/SpecFlow/2.2.0-preview20170523)の最新のプレリリース版を使用することです。 フックメソッドで、FeatureContext viaパラメータを取得できます。試してみた/

public class FeatureContextDriver 
{ 
    public void FeatureContextChangeing(FeatureContext featureContext) 
    { 
     var key = 'key'; 
     var val = 'val'; 
     featureContext.Add(key, val); 
    } 
} 

[Binding] 
public class BaseSteps : Steps 
{ 
    [BeforeFeature] 
    public static void BeforeFeatureStep(FeatureContext featureContext) 
    { 
     var featureContextDriver = new FeatureContextDriver(); 
     featureContextDriver.FeatureContextChangeing(featureContext); 
    } 
} 

[Binding] 
public class OtherStep : Steps 
{ 
    private FeatureContextDriver _featureContextDriver; 
    public OtherStep(FeatureContextDriver featureContextDriver) 
    { 
     _featureContextDriver = featureContextDriver; 
    } 

    public void ExecuteStep() 
    { 
     _featureContextDriver.FeatureContextChangeing(this.FeatureContext); 
    } 
} 

コードがテストされていないとDriver-パターンを適用します。

[BeforeFeature] 
public static void BeforeFeatureHook(FeatureContext featureContext) 
{ 
    //your code 
} 

あなたのコードは、このようになります。 はこのようになります。


完全開示:私はSpecFlowおよびSpecFlow +のメンテナーの一人です。

関連する問題