使用上下文注入替换非绑定 class 中的 ScenarioContext.Current
Replace ScenarioContext.Current in non binding class using context injection
我想使用上下文注入来删除 FeatureContext.Current
和 ScenarioContext.Current
我的代码的过时警告。
我有一个非绑定 class 的记者,需要在测试 运行 之前进行设置。
我尝试制作一个构造函数并将其实例化,但值始终 return 为 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();
}
}
}
在报告中class:
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 总是 return 为空。我希望它能获取当前的功能上下文,这样我就可以用它来获取标题并在报告的其他部分使用它 class。
我对 _scenariocontext 有同样的问题。
主要问题是 Reporter
对象需要 FeatureContext
和 ScenarioContext
对象。 [BeforeFeature]
钩子执行时,ScenarioContext 还不存在。
[BeforeFeature]
挂钩支持几个重载,其中一个接受新创建的 FeatureContext 作为参数。
这与删除作为 Reporter 依赖项的 FeatureContext 和 ScenarioContext 对象 class 将解决您的问题。
首先,更改 StepSetup class 以删除对 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 class 以接受 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 class 变得更加简单,无需在 Reporter class:
上调用静态 "init" 方法
[Binding]
class StepSetup
{
[BeforeFeature]
public static void BeforeFeature(FeatureContext featureContext)
{
Reporter.ReportFeature(featureContext);
}
}
我想使用上下文注入来删除 FeatureContext.Current
和 ScenarioContext.Current
我的代码的过时警告。
我有一个非绑定 class 的记者,需要在测试 运行 之前进行设置。
我尝试制作一个构造函数并将其实例化,但值始终 return 为 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();
}
}
}
在报告中class:
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 总是 return 为空。我希望它能获取当前的功能上下文,这样我就可以用它来获取标题并在报告的其他部分使用它 class。
我对 _scenariocontext 有同样的问题。
主要问题是 Reporter
对象需要 FeatureContext
和 ScenarioContext
对象。 [BeforeFeature]
钩子执行时,ScenarioContext 还不存在。
[BeforeFeature]
挂钩支持几个重载,其中一个接受新创建的 FeatureContext 作为参数。
这与删除作为 Reporter 依赖项的 FeatureContext 和 ScenarioContext 对象 class 将解决您的问题。
首先,更改 StepSetup class 以删除对 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 class 以接受 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 class 变得更加简单,无需在 Reporter class:
上调用静态 "init" 方法[Binding]
class StepSetup
{
[BeforeFeature]
public static void BeforeFeature(FeatureContext featureContext)
{
Reporter.ReportFeature(featureContext);
}
}