我正在使用 VS2008 TFS(带有 MSTest)。
我有一个可靠工作的单元测试,依赖于项目子文件夹中的数据文件(即 testproject1\TestData)。数据文件属性为“构建操作=内容”、“始终复制”。 (它本身不是测试数据文件,而是生产代码读取的文件,通常需要在其自己的文件夹中)
当测试构建并执行时,数据文件被正确复制到 ...\TestResults\(testruniD)\Out 文件夹,并且测试代码找到它。
现在,我将测试及其数据文件移动到解决方案中的另一个测试项目(它真正应该在的位置),数据文件位于相对于新测试项目 (testproject2\TestData) 的同一文件夹中,并且数据文件属性经检查仍如上。但是,在重建时,测试在新位置失败,因为数据文件尚未复制到测试结果输出文件夹,因此执行代码无法找到它。
我应该做一些额外的事情来确保数据文件仍然被复制吗?
我以前遇到过一个相关的问题,一些数据文件被复制到测试结果输出文件夹,而另一些则没有,没有明显的原因,这让我感到困惑。
TIA
我知道这已经晚了。接受的答案在技术上是正确的。然而这些年来我发现部署属性当您有太多数据文件时,该方法会变得很麻烦。就我而言,它接近一千。问题是
- 请记住将每个文件标记为复制到输出 .
- 每次我调试项目时,数千个数据文件都会被复制到MyUnitTestProject\Bin\调试。这减慢了我的整体开发和调试体验。
建议的解决方案
我建议的解决方案是让数据文件在单元测试项目中保留为静态文件,并简单地使用Location执行者的财产系统.反射.装配。考虑到我正在处理大量数据文件,这对我来说非常有效。测试运行时效果良好Jenkins构建服务器。
你可以参考我在另一个答案中发布的代码片段。NUnit 部署项
我提出的解决方案的缺点
每次运行测试时,您不会创建新的部署文件夹。如果您的单元测试要创建输出文件,那么您负责在单元测试程序集的位置下生成一个新文件夹,通常是MyUnitTestProject\Bin\调试.
在此处发布代码,因为我的超链接答案已被删除一个名叫 Martijn Pieters 的人删除了我原来的答案,因为他不喜欢重复。因此我在这里复制原始代码。
internal static string GetFullPathToFile(string pathRelativeUnitTestingFile)
{
string folderProjectLevel = GetPathToCurrentUnitTestProject();
string final = System.IO.Path.Combine(folderProjectLevel, pathRelativeUnitTestingFile);
return final;
}
/// <summary>
/// Get the path to the current unit testing project.
/// </summary>
/// <returns></returns>
private static string GetPathToCurrentUnitTestProject()
{
string pathAssembly = System.Reflection.Assembly.GetExecutingAssembly().Location;
string folderAssembly = System.IO.Path.GetDirectoryName(pathAssembly);
if (folderAssembly.EndsWith("\\") == false) folderAssembly = folderAssembly + "\\";
string folderProjectLevel = System.IO.Path.GetFullPath(folderAssembly + "..\\..\\");
return folderProjectLevel;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)