gpt4 book ai didi

visual-studio - 如何使数据文件可用于单元测试?

转载 作者:行者123 更新时间:2023-12-04 00:36:27 26 4
gpt4 key购买 nike

我正在使用 VS2008 TFS(带有 MSTest)。

我有一个可靠的单元测试,依赖于项目子文件夹中的数据文件(即 testproject1\TestData)。数据文件属性为 Build Action=Content,Copy Always。 (它不是这样的测试数据文件,而是生产代码读取并通常期望在其自己的文件夹中的文件)

当构建并执行测试时,数据文件被正确复制到 ...\TestResults\(testruniD)\Out 文件夹,测试代码找到它。

现在,我将测试及其数据文件移动到解决方案中的另一个测试项目(它真正应该在的位置),数据文件位于与新测试项目 (testproject2\TestData) 相关的同一文件夹中,并且数据文件属性被检查为仍然如上。然而,在重建时,测试在新位置失败,因为数据文件尚未复制到测试结果输出文件夹,因此执行代码无法找到它。

我是否应该做一些额外的事情来确保数据文件仍然被复制?

我之前遇到过一个相关问题,一些数据文件被复制到测试结果输出文件夹,而另一些则没有,原因不明,这让我很困惑。

TIA

最佳答案

我知道这已经晚了。接受的答案在技术上是正确的。然而,多年来我发现当数据文件太多时,DeploymentAttribute 方法会变得很麻烦。就我而言,它接近一千。问题是

  1. 记得将每个文件标记为复制到输出
  2. 每次我调试项目时,上千个数据文件都会被复制到 MyUnitTestProject\Bin\Debug。这减慢了我的整体开发和调试体验。

建议的解决方案

我建议的解决方案是让数据文件在单元测试项目中保持为静态文件,并使用执行 System.Reflection.Assembly Location 属性简单地确定绝对路径em>。考虑到我正在处理的大量数据文件,这对我来说非常有效。在 Jenkins 构建服务器上运行测试时运行良好。

您可以引用我在另一个答案中发布的代码片段。 NUnit DeploymentItem

我提出的解决方案的缺点

您不会在每次运行测试时都创建新的部署文件夹。如果您的单元测试要创建输出文件,那么您有责任在单元测试程序集的位置下生成一个新文件夹,通常是 MyUnitTestProject\Bin\Debug

在这里发布代码是因为我的超链接答案被删除了名叫 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;
}

关于visual-studio - 如何使数据文件可用于单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com