How can I load this file into an NUnit Test?

六眼飞鱼酱① 提交于 2019-11-30 11:38:56

问题


I have the following IntegrationTest project structure ...

If i wish to use that test data 126.txt in an NUnit Test, how do I load that plain txt file data?

NOTE: The file is -linked- and I'm using c# (as noted by the image).

cheers :)


回答1:


You could specify in the properties of the file to be copied to the output folder and inside the unit test:

string text = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\TestData\\126.txt");

As an alternative you could embed this file as a resource into the test assembly and then:

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();
}



回答2:


If you do not want the files as ManifestResources, but just as file on the system. See Trouble with NUnit when determining the assembly's directory for more info and this answer in particular

Also interesting is the info from NUnit https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/3

But here is the quick info:

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

Where Files\test.PDF is just a file in your test project, with build action content and copy to output directory copy if newer

All credits go out to the people in the other post, but took me a while to find that answer, and that is the reason why i am adding the answer to this post.




回答3:


This question is currently answered, but for googlers searching for other possibilities:

If you get a DirectoryNotFoundException because the test is looking in C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common... rather than in bin\Debug\..., it means your test adapter is executing from a path that isn't your test project output directory.

To solve this, you can get that bin\Debug\... directory by looking for the directory of the test DLL like so:

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

I threw that in a TestHelpers static class in the test project so that I can use it in every test that needs to load external files.

Code is courtesy of this answer.




回答4:


Found a gotcha with using TestContext.CurrentContext.TestDirectory. This works perfectly in a Setup, but when I call it from within a method supplied to a TestCaseSource, the static method is called before all other code, and returns the following:

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

However, using TestContext.CurrentContext.WorkDirectory gives the desired result in both places:

C:\SVN\MyApp\trunk\MyApp.Tests\bin\Debug\netcoreapp2.1


来源:https://stackoverflow.com/questions/6080596/how-can-i-load-this-file-into-an-nunit-test

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!