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

Написание модульных тестов: как программно получить папку с пробными файлами

Я пишу модульные тесты в visual studio 2010.
Для тестирования некоторых функций я добавил папку с тестовыми файлами.
Мне нужно получить эту папку программно без жесткого пути в строке.

Папка содержит <projectDirectory>/TestFiles

Я попытался использовать AppDomain.CurrentDomain.BaseDirectory. Это будет работать, только если я запустил свои модульные тесты с помощью resharper.
результат <projectDirectory>/bin/debug, поэтому я могу легко перейти к TestFiles.

Если я запускаю тест с визуальной студией, BaseDirectory:
<sameFolderAsSolutionFile>\TestResults\<username>_<pcname> <datatime>\Out

Я переместил файл решения в другую папку. Поэтому мои проекты не находятся в той же папке, что и файл решения.
Пример:
<sameFolderAsSolutionFile> = C:\SolutionFiles
<projectDirectory> = C:\Projects\MyProject

Может ли кто-нибудь сказать мне, как получить путь к моим тестовым файлам без использования жесткокодированной строки?

ИЗМЕНИТЬ
Я еще не нашел решение.
Visual Studio использует другую сборку для тестирования. Итак, все, что обычно создается в папке bin, будет создано в другую папку для теста.

МОЕ ТЕМП-РЕШЕНИЕ
Я добавил файл App.config в своем тестовом проекте. В этом файле конфигурации я добавил параметр с требуемым путем к тестовым файлам:

<appSettings>
  <add key="TestFiles" value="C:\Projects\MyProject\TestFiles"/>
</appSettings>
4b9b3361

Ответ 1

Вы можете скопировать эту папку в папку развертывания модульных тестов с помощью атрибута DeploymentItem.

Ответ 2

Даже на вопрос уже ответил, я хочу внести свой вклад в решение, которое сработало для меня, как и другие. Вам нужно будет скопировать файл в каталог bin тестового проекта, помечая файл в его свойствах. Скопировать в каталог ouput = "Копировать всегда", затем в тесте вы можете прочитать файл с помощью этого кода:

var baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var testFile = Path.Combine(baseDir, "TestFiles", "file.txt");

var file = File.OpenRead(testFile))

Ответ 3

Самый надежный способ - использовать TestContext. Этот объект имеет целую кучу свойств для пути развертывания, пути результатов и т.д. См. Также можно использовать TestContext. См. http://msdn.microsoft.com/en-us/library/ms404699.aspx.

Ответ 4

Вы можете использовать Path.Combine(Assembly.GetExecutingAssembly().Location,"TestFiles") для доступа к этой папке без жесткого кодирования. Вы должны убедиться, что вы добавили папку и файлы в свой тестовый проект и соответствующим образом установили его каталог CopyToOutput.

Ответ 5

Мы делаем это следующим образом:

var assembly = Assembly.GetAssembly(this.GetType());
var codebase = assembly.CodeBase.Replace("file:///", "");
var baseDir = Path.GetDirectoryName(codebase);

Этот фрагмент кода С# поступает из процедуры установки unit test и извлекает каталог кода unit test. Отсюда вы можете перемещаться... Я не думаю, что он очень изящный... но:)

Ответ 6

В случае, если кто-то вроде меня приходит, если вы используете файл .testsettings и атрибут DeploymentItem в классе не работает, даже если вы установили свои файлы как "Контент" и "Всегда копировать", потому что либо у вас уже есть раздел "Развертывание" в файле .testsettings, либо вам нужно использовать DeploymentItem в файле .testsettings. Вот как выглядит наш взгляд:

<Deployment>
    <DeploymentItem filename="Tests\Unit Tests\ConnectionStrings.config" />
    <DeploymentItem filename="Tests\Unit Tests\<project dir>\bin\Debug\TestFiles\" outputDirectory="TestFiles" />
</Deployment>

Один файл, другой - 13 файлов в каталоге. Обратите внимание на конечную косую черту для каталога "filename"!

Решение и подробная информация была найдена по адресу:

MsTest DeploymentItem OutputDirectory в наборах тестов