Как я могу загрузить этот файл в тест NUnit? - PullRequest
36 голосов
/ 21 мая 2011

У меня есть следующая структура проекта IntegrationTest ...

enter image description here

Если я хочу использовать эти тестовые данные 126.txt в NUnit Test, как мне загрузить этоданные простого текстового файла?

ПРИМЕЧАНИЕ. Файл -linked-, и я использую c # (как показано на рисунке).

cheers:)

Ответы [ 4 ]

54 голосов
/ 21 мая 2011

Вы можете указать в свойствах файла для копирования в выходную папку и внутри модульного теста:

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();
}
36 голосов
/ 31 января 2017

Если вы не хотите, чтобы файлы были ManifestResources, а просто как файлы в системе. См. Проблема с NUnit при определении каталога сборки для получения дополнительной информации и этот ответ в частности

Также интересна информация от NUnit https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/3

Но вот краткая информация:

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

Где Files \ test.PDF - это просто файл в вашем тестовом проекте с содержимым действия сборки и копией в выходной каталог, если новее

Все сообщения отправляются людям из другого поста, но мне понадобилось некоторое время, чтобы найти этот ответ, и именно поэтому я добавляю ответ в этот пост.

19 голосов
/ 26 ноября 2015

На этот вопрос в настоящее время дан ответ, но для googlers, которые ищут другие возможности:

Если вы получаете 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

Я добавил это в TestHelpers статический класс в тестовом проекте, чтобы я мог использовать его в каждом тесте, который должен загружать внешние файлы.

Код любезно предоставлен этот ответ.

1 голос
/ 14 ноября 2018

Найдена ошибка с использованием TestContext.CurrentContext.TestDirectory. Это прекрасно работает в программе установки, но когда я вызываю его из метода, предоставленного TestCaseSource, статический метод вызывается перед всем другим кодом и возвращает следующее:

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

Однако использование TestContext.CurrentContext.WorkDirectory дает желаемый результат в обоих местах:

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