Как запустить модульный тест в папке bin
Я пытаюсь получить доступ к файлу в моей структуре решения во время модульного теста. Мой проект модульного тестирования имеет bin\Debug\
в качестве выходного каталога. Итак, я написал код, предполагая, что Path.GetFullPath(".")
в моем модуле тест выдаст мне эту папку bin. Но то, что он делает, это дает мне временное местоположение как путь.
C:\Users\[username]\AppData\Local\Temp\TestResults\[username]_[machine_name] 2013-05-16 08_31_07\Out
Очевидно, что мой модульный тест не смог получить доступ к файлам в моем решении. Если кто-нибудь знает, как запустить модульный тест в папке bin проекта модульного теста, пожалуйста, помогите.
6 ответов
Вы можете сделать это, используя файл.runsettings и установив <DeploymentEnabled>false</DeploymentEnabled>
, Смотрите раздел "Замечания" здесь. Тем не менее, вы не можете сделать это, если вы используете файл.testsettings, и если вы хотите иметь возможность проверять любые файлы, которые ваши тесты читают или пишут после неудачного запуска, вы не сможете, потому что они могут быть испорчен дальнейшими испытаниями и т. д.
Другой вариант - использовать элементы развертывания, что можно сделать с помощью DeploymentItemAttribute
или через ваш файл.testsettings. Механизм атрибутов является предпочтительным, и, в основном, на методах тестирования, для которых вам необходимо развернуть файлы, выполните следующие действия:
[DeploymentItem(@"source", @"target")]
public void Test1() {}
Где источник - это либо путь относительно папки вывода сборки, либо абсолютный путь, а цель - это либо путь относительно места выполнения тестов, либо абсолютный путь. Вы можете не указывать целевой параметр, в этом случае он примет цель ".", То есть папку, из которой выполняются тесты. Документы для этого здесь
Другой вариант, который может вам подойти, - это использовать NUnit вместо MSTest. В этом случае тесты выполняются в каталоге bin\debug
Это обновление для тех, кто может столкнуться с этой проблемой с помощью Visual Studio 2015. В соответствии с @guysherman, у меня есть папка "Элементы решения" в файле "Solution" в моем обозревателе решений, и должен быть файл.testrunconfig. Если вы открываете его с помощью Visual Studios, в верхней части флажок "Включить развертывание" можно снять.
У меня была та же проблема, когда мои тесты развертывали.dll в папку TestRun каждый раз, когда я запускал модульные тесты, но файл.config, который был включен в исполняемый файл, ссылается на другой файл common.config, который не развертывался со всем остальным, поэтому Я никогда не подключался к своему серверу SQL, потому что это было указано в common.config. Если снять флажок "Включить развертывание", мои тесты запускались прямо из папки bin, указанной в проекте.
Если вы пытаетесь получить доступ к файлам или ресурсам, которые, по вашему мнению, находятся в папке по умолчанию, вы можете попытаться дать им явный каталог расположения сборки. Пример:
string dataSource = AppDomain.CurrentDomain.BaseDirectory + "TestDb.mdb";
AppDomain.CurrentDomain.BaseDirectory обычно разрешает фактическое расположение сборки, что вы и планировали.
Мы столкнулись с этой проблемой в VS 2017, но наша проблема заключалась в том, что log4net.config не копировался в папку TestResults (даже если "Копировать всегда").
Нашим решением было удалить LocalTestRun.testrunconfig
файл из Solution Items
папка (прямо под решением). Когда мы это сделали, он начал использовать папку \bin\debug\ как надо и нашел наш файл log4net.config.
Это похоже на ошибку Visual Studio. Вот что я сделал, чтобы исправить это (что волшебным образом сработало!):
- Перемещено / Переименовано
local.testsettings
файл. - Пытался снова запустить тест (который не запустится)
- Положил
local.testsettings
подать снова. - Он должен запустить тест на провал сейчас!