首先,我是SpecFlow的新手。
我有一个要使用MSTest进行自动化的功能文件,该功能文件作为功能测试运行,涉及功能齐全的服务器,数据访问...
为此,我必须使用SpecFlow的“给定”块中的数据配置服务器,然后再启动它。我还必须将一些文件复制到测试的输出目录。
在非SpecFlow功能测试中,我使用ClassInitialize属性从TestContext获取TestDeploymentDir。像这样的东西:
[ClassInitialize]
public static void ClassSetup(TestContext context)
{
TargetDataDeploymentRoot = context.TestDeploymentDir;
}
现在,通过SpecFlow,我无法再使用此属性,因为它已由SpecFlow本身使用。
确实存在一些新属性,例如BeforeFeature,其行为类似,但是它不会作为参数传递到TestContext上。
我只需要访问TestContext的TestDeploymentDir即可在真正启动功能测试服务器之前将一些文件复制到那里-没有SpecFlow即可轻松实现,而使用SpecFlow则几乎无法实现。
如何处理这个问题?
有可能吗?
非常感谢您的建议!
罗伯特
环境:
最佳答案
从SpecFlow 2.2.1开始,可以通过上下文注入(inject)来使用TestContext。 (https://github.com/techtalk/SpecFlow/pull/882)
您可以直接从容器中获取它:ScenarioContext.Current.ScenarioContainer.Resolve<Microsoft.VisualStudio.TestTools.UnitTesting.TestContext>()
或通过上下文注入(inject):
public class MyStepDefs
{
private readonly TestContext _testContext;
public MyStepDefs(TestContext testContext) // use it as ctor parameter
{
_testContext = testContext;
}
[BeforeScenario()]
public void BeforeScenario()
{
//now you can access the TestContext
}
}
关于c# - SpecFlow:ClassInitialize和TestContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12218020/