我在" SpecFlowTests"中进行了一些SpecFlow测试。在VS中运行项目,他们需要一些测试数据文件。我使用.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版本运行它们)。
我相对较新,所以任何建议都表示赞赏。
谢谢!
答案 0 :(得分:0)
[DeploymentItem]属性不适用于BeforeFeature方法。他们必须穿上真正的testmethod / testclass。
从SpecFlow 2.2开始,您可以在要素文件中指定deploymentitems,以获取在正确位置生成的属性。将@MsTest:DeploymentItem:Helpers\TestDataFile.txt
添加到您的功能中
我们的测试套件中的示例:https://github.com/techtalk/SpecFlow/blob/master/Tests/TechTalk.SpecFlow.Specs/Features/MsTestProvider.feature