Как запустить модульный тест в папке 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. Вот что я сделал, чтобы исправить это (что волшебным образом сработало!):

  1. Перемещено / Переименовано local.testsettings файл.
  2. Пытался снова запустить тест (который не запустится)
  3. Положил local.testsettings подать снова.
  4. Он должен запустить тест на провал сейчас!
Другие вопросы по тегам