ステップクラスが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 +のメンテナーの一人です。