How can I load this file into an NUnit Test?

C#.NetTestingTddNunit

C# Problem Overview


I have the following IntegrationTest project structure ...

enter image description here

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 :)

C# Solutions


Solution 1 - C#

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

Solution 2 - C#

If you do not want the files as ManifestResources, but just as file on the system. See https://stackoverflow.com/questions/4336068/trouble-with-nunit-when-determining-the-assemblys-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.

Solution 3 - C#

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.

Solution 4 - C#

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPure.KromeView Question on Stackoverflow
Solution 1 - C#Darin DimitrovView Answer on Stackoverflow
Solution 2 - C#Ben CroughsView Answer on Stackoverflow
Solution 3 - C#kdbanmanView Answer on Stackoverflow
Solution 4 - C#montyView Answer on Stackoverflow