【问题标题】:NUnit/Resharper 2016 failing to resolve relative pathNUnit/Resharper 2016 无法解析相对路径
【发布时间】:2016-10-17 02:54:58
【问题描述】:

我不知道谁是罪魁祸首,但我在测试类中有以下代码行:

var sut = new PatientSearchService(@"\data\patientinfo.csv");

在测试项目中,我有一个名为 data 的文件夹,其中有一个名为 patientinfo.csv 的文件,标记为内容并始终要复制。在测试项目的 Debug 文件夹中,存在此数据文件夹和患者信息文件。但是,当我执行测试时,有人,不知道是 Resharper、NUnit 还是 Visual Studio 2015,正在将该相对路径转换为 ​​

c:\data\patientinfo.csv

而不是相对路径。反斜杠或正斜杠无关紧要。

不敢相信这是 2016 年的问题,但我可能错过了一些火车。有人在这里发生了什么?

【问题讨论】:

  • 这是 NUnit 3 吗?测试不必在根 dll 位置(调试文件夹)中运行 - 使用 TestContext.CurrentContext.TestDirectory 获取 dll 目录。

标签: visual-studio unit-testing nunit resharper


【解决方案1】:

你有两个问题:

  1. 路径 @"\data\patientinfo.csv" 不是相对的,而是绝对的。可能,您的意思是省略最初的斜线。所以代码完全按照你告诉它的去做。

  2. 如果您需要,则不会将相对路径解析为程序集的位置。正如 Chris 所说,您必须将其与装配位置结合起来。

【讨论】:

  • 我还会注意使用“影子复制”运行的测试。 NUnit 和 R# 都有这个选项(OP 正在询问 NUnit;但我会提到这一点,以防读者使用 R# 测试运行程序)。如果启用该选项,则测试可能会失败,因为程序集可能会被复制到“影子副本”以进行测试;但它们不一定会附带您可能期望在相对位置的任何资源。关闭“卷影复制”意味着程序集将在它们所在的位置进行测试。
  • 我一直认为无论有没有卷影副本都无法运行的代码是错误的。如您所料,其他人不同意。 :-)
猜你喜欢
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2011-01-29
  • 2020-11-12
  • 2023-01-10
相关资源
最近更新 更多