Как получить модульный тест для копирования DLL и других файлов при запуске теста?

Я работаю над приложением, и я создал для него несколько модульных тестов. Проект с тестовым классом зависит от 3 сторонних библиотек DLL. Когда я иду в папку binDebug для тестового проекта, библиотеки DLL находятся там. Но когда я запускаю тест, библиотеки DLL не копируются в папку TestResult\Out.

существует также log4net.конфигурационный файл из другого проекта, который я хотел бы скопировать. Это не отображается в binDebug тестового проекта папка, так что это еще одна проблема, которую я должен исправить.

Как получить эти файлы для копирования при запуске модульного теста?

Тони

5 ответов


У нас есть папка bin, содержащая сторонние DLL, которые должны быть частью сборок. Они помечены атрибутом 'copy local' в ссылке.

Что касается отдельных файлов, вы можете сделать то же самое - установить "копировать в выходной каталог" в true.


вы можете использовать атрибута deploymentitemattribute. скопировать файлы в bin (или другой) каталог.

[TestMethod()]
[DeploymentItem("log4net.config")]
public void SomeTest()
{
   ...
}

я обнаружил, что если ваши тесты развертываются в тестовой области (true по умолчанию), copy local не будет работать в некоторых обстоятельствах, таких как динамическая загрузка сборки.

вы можете отключить это развертывание с помощью файла runsettings (https://msdn.microsoft.com/en-us/library/ms182475.aspx) и

<DeploymentEnabled>False</DeploymentEnabled>

или небольшой хак (немного уродливый, поскольку он требует ручного / жесткого кодирования сборки), используя DeploymentItem для двоичного файла (упомянутого в другие ответы, но не специфичные для обработки DLL в соответствии с OP):

[DeploymentItem("bin\release\iRock.dll")]
[DeploymentItem("bin\debug\iRock.dll")]

рекомендуется выполнять отладку / выпуск, в зависимости от того, что используется на вашем CI/Dev.


такое копирование dll ( помимо ссылки на них-где вы можете сказать Copy Local) и размещение их в папке out не должно быть частью ваших тестов, а частью вашего процесса сборки / упаковки. Имейте скрипты сборки, которые делают необходимое копирование DLL.


при отладке из studio используйте атрибут развертывания в классе или testmethod, чтобы скопировать необходимые файлы dll и config в папку Out, из которой выполняются MSTests. При запуске из командной строки используйте файл TestSettings, отключите параметр развертывания и установите папку BIN в качестве рабочего каталога. Используйте / обратитесь к этому файлу TestSettings в командной строке для запуска mstest. Таким образом, вы можете запустить mstest прямо в папке BIN без сброса DLL в каталог out. Снова использовать атрибут развертывания для отладки из studio, там testsettings не будет работать.