首先,我是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则几乎无法实现。

如何处理这个问题?

有可能吗?

非常感谢您的建议!

罗伯特

环境:
  • Visual Studio 2012
  • SpecFlow 1.9.0.77
  • 最佳答案

    从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/

    10-13 01:58