VSTest - SpecFlow 测试的测试数据文件不会部署到 TestResults

VSTest - Test data files for SpecFlow tests do not get deployed to TestResults

我在 VS 的 "SpecFlowTests" 项目中对 运行 进行了一些 SpecFlow 测试,他们需要一些测试数据文件。我正在使用 .testsettings 文件来部署文件并且它有效。但是,新的 MsTest 代理不再支持 .testsettings,所以我需要找到另一种解决方案来部署文件。

测试数据文件的 "Copy to Output Directory" 设置为 "Copy Always"。它们被复制到输出目录中,我可以通过以下方式获取输出目录在代码中引用它们:

public static string AssemblyLocation()
        {
            var assembly = Assembly.GetExecutingAssembly();
            var codebase = new Uri(assembly.CodeBase);
            var path = codebase.LocalPath;
            return path;
        }

当 运行在本地测试或 运行将它们作为 TFS 构建的一部分时,此方法有效,它会在以下位置查找文件:

...\SpecFlowTests\bin\Debug\Helpers\TestDataFile.txt

但是,当尝试 运行 它们作为 TFS 发布的一部分时,它会在 TestResults 目录的 Out 文件夹中查找测试数据文件,但无法在那里找到它们。

C:\buildagent1\_work\r1\a\TestResults\Out\Helpers\TestDataFile.txt

然后我尝试在测试中的 BeforeFeature 方法上设置 DeploymentItem 属性,但它看起来不起作用,它应该将测试数据文件部署到 TestResults 中的 Out 文件夹,但它没有。

所以我需要一个适用于所有三种情况的通用解决方案(运行 在本地测试,运行 它们来自 TFS 构建,运行 它们来自 TFS 发布)。

我在这方面相对较新,因此不胜感激。

谢谢!

[DeploymentItem] 属性不适用于 BeforeFeature 方法。他们必须穿上真正的 testmethod/testclass.

从 SpecFlow 2.2 开始,您可以在功能文件中指定部署项,以获取在正确位置生成的属性。为您的功能添加 @MsTest:DeploymentItem:Helpers\TestDataFile.txt
来自我们测试套件的示例:https://github.com/SpecFlowOSS/SpecFlow/blob/master/Tests/TechTalk.SpecFlow.Specs/Features/UnitTestProviderSpecific/MsTest/DeploymentItem.feature