Dar*_*rov 58
您可以在要复制到输出文件夹和单元测试内的文件属性中指定:
string text = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\TestData\\126.txt");
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以将此文件作为资源嵌入到测试程序集中,然后:
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();
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*ghs 38
如果您不希望文件作为ManifestResources,而只是作为系统上的文件.在确定程序集的目录时,请参阅NUnit的麻烦以获取更多信息,特别是此答案
同样有趣的是来自NUnit的信息https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/3
但这里是快速信息:
Path.Combine(TestContext.CurrentContext.TestDirectory, @"Files\test.pdf")
Run Code Online (Sandbox Code Playgroud)
Files\test.PDF只是测试项目中的一个文件,带有构建操作内容,如果更新则复制到输出目录副本
所有的积分都发给了另一篇文章中的人,但是我花了一些时间才找到答案,这就是我为这篇文章添加答案的原因.
kdb*_*man 19
这个问题目前已得到解答,但对于搜索其他可能性的google:
如果你得到的是DirectoryNotFoundException因为测试是在查看C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common...而不是在中bin\Debug\...,这意味着你的测试适配器是从一个不是你的测试项目输出目录的路径执行的.
要解决此问题,您可以bin\Debug\...通过查找测试DLL的目录来获取该目录,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我把它扔在TestHelpers测试项目的静态类中,这样我就可以在每个需要加载外部文件的测试中使用它.
代码是礼貌的答案.
发现使用TestContext.CurrentContext.TestDirectory. 这在设置中非常有效,但是当我从提供给 TestCaseSource 的方法中调用它时,静态方法在所有其他代码之前调用,并返回以下内容:
C:\Users\<username>\.nuget\packages\nunit\3.10.1\lib\netstandard2.0
Run Code Online (Sandbox Code Playgroud)
但是,使用TestContext.CurrentContext.WorkDirectory在两个地方都可以得到想要的结果:
C:\SVN\MyApp\trunk\MyApp.Tests\bin\Debug\netcoreapp2.1
Run Code Online (Sandbox Code Playgroud)