Как загрузить этот файл в NUnit Test?
У меня есть следующая структура проекта IntegrationTest...
![enter image description here]()
Если я хочу использовать эти тестовые данные 126.txt
в NUnit Test
, как я могу загрузить эти простые данные файла txt?
ПРИМЕЧАНИЕ. Файл -linked-
, и я использую С# (как отмечено на изображении).
cheers:)
Ответы
Ответ 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