Основная проблема заключается в том, что для объекта Reporter
требуется объект FeatureContext
и ScenarioContext
.Когда выполняется хук [BeforeFeature]
, ScenarioContext еще не существует.
Хук [BeforeFeature]
поддерживает пару перегрузок, одна из которых принимает вновь созданный FeatureContext в качестве аргумента.
Это в сочетании с удалением объектов FeatureContext и ScenarioContext в качестве зависимостей для класса Reporter решит вашу проблему.
Сначала измените класс StepSetup, чтобы удалить зависимости от FeatureContext и ScenarioContext, и измените [BeforeFeature]
для принятияобъект FeatureContext в качестве аргумента:
[Binding]
class StepSetup
{
[BeforeTestRun]
public static void InitializeReport()
{
Reporter.ReportInit();
}
[BeforeFeature]
public static void BeforeFeature(FeatureContext featureContext)
{
var reporter = new Reporter();
reporter.ReportFeature(featureContext);
}
}
Затем измените класс Reporter, чтобы он принимал аргумент FeatureContext в ReportFeature:
class Reporter
{
public static ReportInit()
{
// does stuff
}
public void ReportFeature(FeatureContext featureContext)
{
featureName = extent.CreateTest<Feature>(featureContext.FeatureInfo.Title);
}
}
Если метод Reporter.ReportFeature не использует какие-либо поля экземплярарассмотрите возможность сделать этот метод статическим, а также использовать статический конструктор вместо метода Reporter.ReportInit ():
static class Reporter
{
static Reporter()
{
// does stuff
}
public static void ReportFeature(FeatureContext featureContext)
{
featureName = extent.CreateTest<Feature>(featureContext.FeatureInfo.Title);
}
}
Тогда ваш класс StepSetup станет еще проще без необходимости вызывать статический "Метод init "в классе Reporter:
[Binding]
class StepSetup
{
[BeforeFeature]
public static void BeforeFeature(FeatureContext featureContext)
{
Reporter.ReportFeature(featureContext);
}
}
См. Статические конструкторы (Руководство по программированию в C #)