C#单元测试项目中的相对路径问题

15

我有一个解决方案,其中包括一个控制台应用程序和单元测试。

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);

验证器位于控制台应用程序项目,而我的file.xml位于单元测试项目内一个文件夹中。

这个单元测试通过了,但我想确保当我将其检入我的TFS或构建服务器时,它仍然可以找到我的targetFile。

我该如何更改targetFile的路径?

提前感谢您!


你正在使用哪个单元测试框架? - Richard Schneider
5个回答

11

如果我正确理解了你的问题,那么控制台应用程序中的产品代码依赖于测试项目中的某个项不是好的做法,所以我建议你将file.xml移动到产品代码项目中。

为了解决你的路径问题,我认为最好的方法是在VS属性窗口中使用Copy to Output Directory属性作为Copy always或者Copy if newer

请查看以下步骤:

  1. 如果需要,在产品项目中创建一个文件夹(例如Data文件夹),用于存放file.xml
  2. file.xml放入该文件夹中。
  3. 转到file.xml的VS属性窗口。
  4. Build Action设置为None,将Copy to Output Directory设置为Copy alwaysCopy if newer
  5. 构建并进行单元测试.

Assert.IsTrue(File.Exists(@"Data\file.xml"));

在这种情况下,VS将自动在测试项目的输出文件夹下创建带有file.xml的数据文件夹。


这是我目前正在做的事情。然而,我不知道如何将目标文件的路径更改为相对路径,以便我可以确保在构建服务器上不会出现任何问题。 - Gerald
2
我认为重要的是在测试项目中捕获当前位置。通常,正确的位置与测试项目的输出文件夹(bin\debug)相同。根据测试框架,输出文件夹可能会被复制到其他地方,这称为影子复制。然而,在这种情况下没有问题,因为相对路径没有被破坏。 - Jin-Wook Chung
谢谢。这对我真的很有帮助。 - Sunil

5
您可以像下面这样引用文件夹。
"..\..\TargetFolder\file.xml"

1
实时单元测试与标准的MS测试不具有相同的相对路径。 - ToXinE

4
我找到了解决我的问题的方法。我使用了这个:
"..\..\..\TestFileFolder\myFile.xml"

2

0

Validator 的位置不应该影响到程序。任何相对路径都应该是相对于执行测试应用程序的目录,所以只需将 targetFile 设置为相对路径即可。 然后确保在构建服务器上与开发机器上的相对位置相同运行测试。

奖励提示:使用 Assert.IsTrue(actual);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接