C# 如何将此文件加载到NUnit测试中?

C# 如何将此文件加载到NUnit测试中?,c#,.net,testing,tdd,nunit,C#,.net,Testing,Tdd,Nunit,我有以下IntegrationTest项目结构 如果我希望在NUnit测试中使用该测试数据126.txt,如何加载该普通txt文件数据 注意:该文件是-链接的-,我使用的是c#(如图所示) 干杯:)您可以在要复制到输出文件夹的文件属性和单元测试中指定: string text = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\TestData\\126.txt"); 作为替代方案,您可以将此文件作为资源嵌入到测试

我有以下IntegrationTest项目结构

如果我希望在
NUnit测试中使用该测试数据
126.txt
,如何加载该普通txt文件数据

注意:该文件是
-链接的-
,我使用的是c#(如图所示)


干杯:)

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

string text = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\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();
}

这个问题目前已经得到了回答,但对于搜索其他可能性的谷歌用户来说:

如果由于测试是在
C:\Program Files(x86)\Microsoft Visual Studio 14.0\Common…
而不是在
bin\Debug\…
中查找,因此得到了一个
DirectoryNotFoundException
,则表示测试适配器是从不是测试项目输出目录的路径执行的

要解决此问题,您可以通过如下方式查找测试DLL的目录来获取
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
静态类中加入了它,这样我就可以在需要加载外部文件的每个测试中使用它


如果您不想将文件作为资源,而只是作为系统上的文件,则代码由。

提供。有关更多信息,请参阅,特别是

同样有趣的是NUnit提供的信息

但以下是快速信息:

Path.Combine(TestContext.CurrentContext.TestDirectory, @"Files\test.pdf")
其中Files\test.PDF只是测试项目中的一个文件,包含生成操作内容,如果更新,则复制到输出目录copy


所有学分都归其他帖子中的人所有,但我花了一段时间才找到答案,这就是我将答案添加到此帖子的原因。

使用
TestContext.CurrentContext.TestDirectory找到了一个问题。这在设置中非常有效,但当我从提供给TestCaseSource的方法中调用它时,静态方法会在所有其他代码之前被调用,并返回以下内容:

C:\Users\<username>\.nuget\packages\nunit\3.10.1\lib\netstandard2.0

当然:)维基:)完全忘记了。我还对路径进行了编辑,以使文件夹在技术上正确。干杯,伙计。一如既往,非常感谢。对于其他方法,您需要将文件的
构建操作设置为
嵌入资源
,而不仅仅是
资源
。我很困惑,因为
WPF
以另一种方式处理它:当ReSharper的测试运行程序执行测试时,第一种方法不起作用。它尝试从“AppData\Local\JetBrains\Installations\…”加载文件。如果使用nunit,解决方案是首先使用“TestContext.CurrentContext.TestDirectory”到正确的目录。最佳解决方案!谢谢Net中的连接路径应使用诸如Path.Combine而不是字符串连接之类的帮助器方法,以避免将错误引入应用程序和/或system.AppDomain.CurrentDomain.BaseDirectory更简单
C:\SVN\MyApp\trunk\MyApp.Tests\bin\Debug\netcoreapp2.1