Ответ 1
Вы можете скопировать эту папку в папку развертывания модульных тестов с помощью атрибута DeploymentItem.
Я пишу модульные тесты в 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>
Вы можете скопировать эту папку в папку развертывания модульных тестов с помощью атрибута DeploymentItem.
Даже на вопрос уже ответил, я хочу внести свой вклад в решение, которое сработало для меня, как и другие. Вам нужно будет скопировать файл в каталог bin тестового проекта, помечая файл в его свойствах. Скопировать в каталог ouput = "Копировать всегда", затем в тесте вы можете прочитать файл с помощью этого кода:
var baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var testFile = Path.Combine(baseDir, "TestFiles", "file.txt");
var file = File.OpenRead(testFile))
Самый надежный способ - использовать TestContext. Этот объект имеет целую кучу свойств для пути развертывания, пути результатов и т.д. См. Также можно использовать TestContext. См. http://msdn.microsoft.com/en-us/library/ms404699.aspx.
Вы можете использовать Path.Combine(Assembly.GetExecutingAssembly().Location,"TestFiles")
для доступа к этой папке без жесткого кодирования. Вы должны убедиться, что вы добавили папку и файлы в свой тестовый проект и соответствующим образом установили его каталог CopyToOutput
.
Мы делаем это следующим образом:
var assembly = Assembly.GetAssembly(this.GetType());
var codebase = assembly.CodeBase.Replace("file:///", "");
var baseDir = Path.GetDirectoryName(codebase);
Этот фрагмент кода С# поступает из процедуры установки unit test и извлекает каталог кода unit test. Отсюда вы можете перемещаться... Я не думаю, что он очень изящный... но:)
В случае, если кто-то вроде меня приходит, если вы используете файл .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"!
Решение и подробная информация была найдена по адресу: