2011-04-16 91 views
2

我在Visual Studio中有一个类库,只是检查指定文件是否存在。如果我只传递存在于bin目录中的一些文本文件的文件名(没有完整路径),它可以通过识别它的存在而正常工作。NUnit从源文件读取文件Bin

因此,如果myfile.txt位于bin目录中,File.Exists(“myfile.txt”)将起作用。

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

回答

2

在你的测试中传递一个相对路径到被测试的类的方法。这样可以避免使用硬编码的完整路径,只要你的测试项目总是在相对于你的源项目的相同位置,它就可以工作。

例如如果你有你的源设置是这样的:

\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
    • 命令行参数:输入包含您的测试的程序集名称,后跟run参数,例如TestProject.dll /运行
  3. 将包含测试的项目设置为启动项目。
  4. 命中F5。

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

+0

如何确保测试项目与源项目相关。当我运行NUnit GUI时,它会复制dll并在临时文件夹中运行应用程序。 – helloworld 2011-04-17 07:52:36

+0

@enableDeepak我不直接运行NUnit GUI,请参阅我的更新了解我的作用 – Graham 2011-04-17 10:48:44

+1

@enableDeepak NUnit使用影子复制从临时文件夹运行以避免锁定dll。在NUnit2的早期版本中,这允许NUnit保持dll加载,但仍允许您重新编译。这可能不再需要,我认为有一个设置可以关闭它。检入NUnit GUI的选项。 – 2011-04-17 10:57:45