我想使用上下文注入来删除FeatureContext.Current
和ScenarioContext.Current
我的代码的过时警告。
我有一个非绑定类的报告程序,需要在运行测试之前进行设置。
我尝试制作一个构造函数并将其实例化,但是值始终返回Null。
在设置步骤
namespace EclipseWebAutomationV2.Steps
{
[Binding]
class StepSetup
{
public static FeatureContext _featurecontext;
public static ScenarioContext _scenariocontext;
[BeforeTestRun]
public static void InitializeReport()
{
Reporter.ReportInit();
}
[BeforeFeature]
public static void BeforeFeature()
{
Reporter bfeature = new Reporter(_featurecontext, _scenariocontext);
bfeature.ReportFeature();
}
}
}
在报告类中:
namespace EclipseWebAutomationV2.Configurations
{
class Reporter
{
private readonly FeatureContext _featurecontext;
private readonly ScenarioContext _scenariocontext;
public Reporter(FeatureContext _featurecontext, ScenarioContext _scenariocontext)
{
this._featurecontext = _featurecontext;
this._scenariocontext = _scenariocontext;
}
public static void ReportInit()
{
//does stuff
}
public void ReportFeature()
{
featureName = extent.CreateTest<Feature>(_featurecontext.FeatureInfo.Title);
}
}
}
_featurecontext始终返回null。我希望它能够获取当前的要素上下文,以便可以使用它来获取标题并将其用于报告类的其他部分。
我在_scenariocontext中遇到相同的问题。
答案 0 :(得分:0)
主要问题是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类更改为在ReportFeature中接受FeatureContext参数:
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类变得更加简单,无需在Reporter类上调用静态的“ init”方法:
[Binding]
class StepSetup
{
[BeforeFeature]
public static void BeforeFeature(FeatureContext featureContext)
{
Reporter.ReportFeature(featureContext);
}
}