【问题标题】:NUnit read file from source BinNUnit 从源 Bin 读取文件
【发布时间】:2011-08-06 23:46:36
【问题描述】:

我在 Visual Studio 中有一个类库,它的方法只是检查指定文件是否存在。如果我只传递 bin 目录中存在的某个文本文件的文件名(没有完整路径),它可以通过识别它的存在来正常工作。

因此,如果 myfile.txt 在 bin 目录中,则 File.Exists("myfile.txt") 有效。

但是当我从执行此方法的 NUnit GUI 加载测试用例时,它无法读取文件。可能是因为执行 NUnit 的 bin 目录与 dll 和 myfile.txt 所在的原始 bin 不同。我如何在我的 NUnit 中解决这个问题而不使用硬编码的完整路径?

【问题讨论】:

    标签: nunit


    【解决方案1】:

    在您的测试中,将相对路径传递给被测类的方法。这样可以避免使用硬编码的完整路径,只要您的测试项目始终位于相对于源项目的相同位置,它就可以工作。

    例如如果您的源设置如下:

    \Solution\src\Project\bin\debug\myFile.txt
    \Solution\test\TestProject\bin\debug\TestAssembly.dll
    

    相对路径将是@"..\..\..\..\Project\bin\debug\myfile.txt"

    更新

    我不太确定为什么您的测试是从临时文件夹中运行的。我要么使用 Resharper 之类的测试运行器,要么按如下方式设置我的测试项目:

    1. 打开包含您的测试的项目的项目属性。
    2. 转到“调试”选项卡并设置以下值:
      • 启动外部程序:输入 nunit.exe 的位置,例如在我的电脑上,它安装到 C:\Program Files\NUnit 2.5.5\bin\net-2.0\nunit.exe
      • 命令行参数:输入包含测试的程序集的名称,后跟运行参数,例如TestProject.dll /run.
    3. 将包含您的测试的项目设置为启动项目。
    4. 按 F5。

    这样您的测试将始终从bin\debug 运行(取决于您的构建配置方式),因此您可以依赖始终位于相同相对位置的项目。

    【讨论】:

    • 如何确保测试项目与源项目相关。当我运行 NUnit GUI 时,它会复制 dll 并在临时文件夹中运行应用程序。
    • @enableDeepak 我不直接运行 NUnit GUI,请查看我的更新以了解适合我的方法
    • @enableDeepak NUnit 使用卷影复制从临时文件夹运行以避免锁定 dll。在 NUnit2 的早期版本中,这允许 NUnit 保持 dll 加载但仍允许您重新编译。这可能不再需要了,我认为有一个设置可以将其关闭。检查 NUnit GUI 的选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多