gpt4 book ai didi

c# - SpecFlow:ClassInitialize 和 TestContext

转载 作者:太空狗 更新时间:2023-10-29 18:36:04 24 4
gpt4 key购买 nike

首先,我是 SpecFlow 的新手。

我有一个功能文件,我有/想要使用 MSTest 自动运行它作为功能测试运行,涉及完全设置的服务器、数据访问......为此,我必须使用 SpecFlow 的“给定” block 中的数据配置服务器,然后再启动它。我还必须将一些文件复制到测试的输出目录。

在非 SpecFlow 功能测试中,我使用 ClassInitialize 属性从 TestContext 获取 TestDeploymentDir;像这样:

[ClassInitialize]
public static void ClassSetup(TestContext context)
{
TargetDataDeploymentRoot = context.TestDeploymentDir;
}

现在有了 SpecFlow,我不能再使用这个属性,因为它由 SpecFlow 本身使用。确实存在一些新属性,例如 BeforeFeature,其行为类似,但不会将 TestContext 作为参数传递。

我只需要访问 TestContext 的 TestDeploymentDir,以便在真正启动我的功能测试服务器之前将一些文件复制到那里 - 没有 SpecFlow 很容易做到,但使用 SpecFlow 几乎不可能。

如何处理这个问题?

有可能吗?

非常感谢您的建议!

罗伯特


环境:

  • Visual Studio 2012
  • SpecFlow 1.9.0.77

最佳答案

自 SpecFlow 2.2.1 起,TestContext 可通过上下文注入(inject)获得。 ( 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com