Der FeatureContext wird nicht initialisiert, da die Klasse Step nicht vom SpecFlow DI Container aufgelöst wird. So wird die SetObjectContainer- Methode nicht aufgerufen (https://github.com/techtalk/SpecFlow/blob/master/TechTalk.SpecFlow/Steps.cs#L10)
Als allgemeine Regel gilt, sollten Sie nicht die Schritte Klassen von Ihrem eigenen instanziiert, sondern bekommen sie über Context Injection (http://specflow.org/documentation/Context-Injection/).
Das ist aber in Ihrem Fall nicht möglich, da Sie sich in einem BeforeFeature-Hook befinden.
Eine mögliche Lösung wäre, dass Sie die neueste Vorabversion von SpecFlow (https://www.nuget.org/packages/SpecFlow/2.2.0-preview20170523) verwenden. Dort können Sie den FeatureContext via Parameter in der Hook-Methode abrufen. sieht wie folgt aus:
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);
}
}
-Code getestet/ausprobiert nicht und wendet das Muster Treiber-:
[BeforeFeature]
public static void BeforeFeatureHook(FeatureContext featureContext)
{
//your code
}
Ihr Code dann wie folgt aussehen könnte.
Vollständige Offenlegung: Ich bin einer der Betreuer von SpecFlow und SpecFlow +.