单元测试项目的相对路径c#

Ger*_*ald 12 c# tfs unit-testing

我有一个具有控制台应用程序和单元测试的解决方案.

var target = new Validator();
var targetFile = @"C:\Folder\SubFolder\AnotherSubFolder\Development\DEV\src\UnitTest\TargetFolder\file.xml";

bool actual = target.Validate(targetFile);
Assert.AreEqual(true, actual);
Run Code Online (Sandbox Code Playgroud)

Validator位于控制台应用程序项目中,而我的file.xml位于单元测试项目内的文件夹中.

这个单元测试正在通过,但是我想确保当我将其签入到我的tfs或构建服务器时,它仍然可以找到我的targetFile.

我怎么改变targetFile的路径?

提前致谢!

Jin*_*ung 9

如果我正确理解了您的问题,那么产品代码(在控制台应用程序中)依赖于测试项目中的项目是不好的,因此我建议您转到file.xml产品代码项目.

为了解决您的路径问题,我认为最好的方法是使用" 复制到输出目录"属性作为"始终复制"或" 复制如果更新",您可以在"VS属性"窗口中找到该属性.

请查看以下步骤.

  1. 如果需要放入file.xml产品项目(例如,数据文件夹),请创建一个文件夹.
  2. 放入file.xml文件夹.
  3. 转到VS Properties窗口file.xml.
  4. 将构建操作设置为无并复制到输出目录以始终复制或复制更新.
  5. 构建并进行单元测试

    Assert.IsTrue(File.Exists(@"Data\file.xml"));
    
    Run Code Online (Sandbox Code Playgroud)

    在这种情况下,VS将自动使用file.xmltest poject的输出文件夹下的数据文件夹.

  • 我认为重要的是抓住测试项目中的当前位置.通常,正确的位置与测试项目的输出文件夹(bin\debug)相同.根据测试框架,输出文件夹可能被复制到其他地方,称为卷影副本.但是,在这种情况下没有问题,因为相对路径没有被破坏. (2认同)

nhr*_*bin 6

您可以参考下面的文件夹.

"..\..\TargetFolder\file.xml"
Run Code Online (Sandbox Code Playgroud)


Erg*_*wun 0

的位置Validator不应该是相关的。任何相对路径都应该相对于测试应用程序正在执行的目录,因此只需设置targetFile为从那里开始的相对路径即可。然后确保您在 bulid 服务器上与您的开发机器上的相对位置相同的位置运行测试。

额外提示:使用Assert.IsTrue(actual);