rob*_*oh. 8 c# mstest specflow visual-studio-2012
首先,我是SpecFlow的新手.
我有一个功能文件,我已经/想要自动使用MSTest作为功能测试运行,涉及完全设置的服务器,数据访问......为此,我必须使用SpecFlow的'Given'中的数据配置服务器阻止并在之后启动它.我还必须将一些文件复制到测试的输出目录中.
在非SpecFlow功能测试中,我使用ClassInitialize属性从TestContext获取TestDeploymentDir; 这样的事情:
[ClassInitialize]
public static void ClassSetup(TestContext context)
{
TargetDataDeploymentRoot = context.TestDeploymentDir;
}
Run Code Online (Sandbox Code Playgroud)
现在有了SpecFlow,我不能再使用这个属性了,因为它被SpecFlow本身使用.确实存在一些新属性,例如BeforeFeature,它的行为类似但是它不会将TestContext作为参数传递.
我只需要访问TestContext的TestDeploymentDir,以便在真正推出我的功能测试服务器之前复制一些文件 - 没有SpecFlow就可以轻松实现,但使用SpecFlow几乎不可能.
如何处理这个问题?
有可能吗?
非常感谢您的建议!
罗伯特
环境:
从 SpecFlow 2.2.1 开始,TestContext 可通过上下文注入获得。( https://github.com/techtalk/SpecFlow/pull/882 )
可以直接从容器中获取:
ScenarioContext.Current.ScenarioContainer.Resolve<Microsoft.VisualStudio.TestTools.UnitTesting.TestContext>()
或通过上下文注入:
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
}
}
Run Code Online (Sandbox Code Playgroud)
Voi*_*Ray -1
有一个FeatureContext以及更常用的ScenarioContext。当然,不同之处在于,FeatureContext 在完整功能的执行期间存在,而 ScenarioContext 仅在场景期间存在。
例如:
添加到上下文:
ScenarioContext.Current.Add("ObjectName", myObject);
Run Code Online (Sandbox Code Playgroud)
得到:
var myObject = ScenarioContext.Current.Get<object>("ObjectName");
Run Code Online (Sandbox Code Playgroud)
你可以在这里读更多关于它的内容。