1

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

测试数据文件的“复制到输出目录”设置为“始终复制”。它们被复制到输出目录中,我可以通过以下方式获取输出目录在代码中引用它们:

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 版本运行它们)。

我在这方面相对较新,所以任何建议都值得赞赏。

谢谢!

4

1 回答 1

1

[DeploymentItem] 属性不适用于 BeforeFeature 方法。他们必须穿上真正的测试方法/测试类。

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

于 2017-09-05T08:19:21.257 回答