Подтвердить что ты не робот

Как загрузить этот файл в NUnit Test?

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

enter image description here

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

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

cheers:)

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

Этот вопрос в настоящее время отвечает, но для поисковиков ищут другие возможности:

Если вы получите 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 в тестовом проекте, чтобы я мог использовать его в каждом тесте, который должен загружать внешние файлы.

Код предоставлен этим ответом.

Ответ 4

Найдена ошибка с использованием 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