Как я могу загрузить этот файл в тест NUnit?
У меня есть следующая структура проекта IntegrationTest...
Если я хочу использовать эти тестовые данные 126.txt
в NUnit Test
Как мне загрузить эти простые текстовые данные файла?
ПРИМЕЧАНИЕ: файл -linked-
и я использую C# (как отмечено на рисунке).
ура:)
4 ответа
Вы можете указать в свойствах файла, который будет скопирован в выходную папку и внутри модульного теста:
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();
}
Если вы не хотите, чтобы файлы как 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 - это просто файл в вашем тестовом проекте с содержимым действия сборки и копией в выходной каталог, если он более новый.
Все кредиты отправляются людям из другого поста, но мне понадобилось некоторое время, чтобы найти этот ответ, и именно поэтому я добавляю ответ в этот пост.
На этот вопрос в настоящее время ответили, но для 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
статический класс в тестовом проекте, так что я могу использовать его в каждом тесте, который должен загружать внешние файлы.
Код предоставлен этим ответом.
Нашел гочу с помощью 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