2011-05-21 84 views
25

我有以下IntegrationTest项目结构...如何将此文件加载到NUnit测试中?

enter image description here

如果我想使用测试数据126.txtNUnit Test,我怎么加载普通的txt文件的数据?

注意:该文件是-linked-,我正在使用c#(如图所示)。

欢呼:)

回答

34

你可以在文件的属性指定要复制到输出文件夹和里面的单元测试:

string text = File.ReadAllText("TestData\\126.txt"); 

作为替代方案,你可以嵌入此文件作为资源进入测试程序集,然后:

var assembly = Assembly.GetExecutingAssembly(); 
using (var stream = assembly.GetManifestResourceStream("ProjectName.Tests.IntegrationTests.TestData.126.txt")) 
using (var reader = new StreamReader(stream)) 
{ 
    string text = reader.ReadToEnd(); 
} 
+0

当然:) wikid :) totoally忘记了这一点。我还编辑了将文件夹包含在技术上正确的路径。队友的欢呼声。非常感谢一如既往。 – 2011-05-21 13:11:53

+1

对于_alternative_方式,您需要将文件的“Build Action”设置为“EmbeddedResource”,而不仅仅是“Resource”。 由于'WPF'以其他方式处理它,我感到困惑:[link](https://stackoverflow.com/questions/9419611/how-to-refer-to-embedded-resources-from-xaml) – Ghosthack 2017-08-08 11:20:34

+1

第一个方法在测试由ReSharper的测试运行器执行时不起作用。它试图从“AppData \ Local \ JetBrains \ Installations \ ....”加载文件。如果使用nunit,解决方案是首先使用“TestContext.CurrentContext.TestDirectory”到正确的目录。 – emirhosseini 2018-02-15 15:22:23

16

这个问题目前正在回答,但对于Google员工寻找其他的可能性:

如果你得到一个DirectoryNotFoundException,因为测试在寻找C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common...而不是bin\Debug\...,这意味着你的测试适配器正在从一个不是你的测试项目输出目录的路径执行。

using System.IO; 
using System.Reflection; 

// Get directory of test DLL 
var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

// dir is now "C:\...\bin\Debug" or wherever the executable is running from 

我扔的是,在测试项目中的TestHelpers静态类,这样我可以使用:

为了解决这个问题,你可以通过查看测试DLL的目录,像这样拿到bin\Debug\...目录它在每个需要加载外部文件的测试中。

代码由this answer提供。

20

如果您不想将这些文件作为ManifestResources,而只是作为系统上的文件。更多资讯,并与评论答案见Trouble with NUnit when determining the assembly's directory:^^^^^这是正确的答案^^^^^

而且有意思的是,从NUnit的https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/3

的信息,但这里是快速信息:

Path.Combine(TestContext.CurrentContext.TestDirectory, @"Files\test.pdf") 

文件所在\是检验.pdf在您的测试项目只是一个文件,以生成操作内容复制到输出目录拷贝是否有更新的

所有学分其他职位走出去的人,但花了我一段时间找到答案,这就是我为这篇文章添加答案的原因。