Как получить модульный тест для копирования моих библиотек DLL и других файлов при запуске теста? - PullRequest
10 голосов
/ 17 октября 2011

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

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

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

Tony

Ответы [ 5 ]

11 голосов
/ 17 октября 2011

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

[TestMethod()]
[DeploymentItem("log4net.config")]
public void SomeTest()
{
   ...
}
5 голосов
/ 17 октября 2011

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

Что касается отдельных файлов, вы можете сделать то же самое - для параметра «Copy to output directory» установить значение true.

1 голос
/ 26 октября 2015

Я обнаружил, что если ваши тесты развертываются в тестовой области (по умолчанию true), копирование 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.

0 голосов
/ 22 октября 2011

При отладке из студии используйте атрибут Deployment в классе или методе test, чтобы скопировать необходимые библиотеки DLL и файлы конфигурации в папку Out, из которой выполняются MSTests.Если вы запускаете из командной строки, используйте файл TestSettings, отключите опцию «Развертывание» и установите папку BIN в качестве рабочего каталога.Используйте / обратитесь к этому файлу TestSettings в командной строке для запуска mstest.Таким образом, вы можете запустить mstest прямо в папке BIN, не выгружая библиотеки DLL в выходной каталог.Опять же, используйте атрибут развертывания для отладки из студии, там тестовые настройки не будут работать.

0 голосов
/ 17 октября 2011

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

...