vstest.console создает исключение System.IO.FileNotFoundException
Мое приложение имеет несколько проектов модульных тестов. Все остальные проекты и проекты модульных тестов собираются в общий выходной каталог. С помощью задачи msbuild я собираю все сборки модульных тестов и запускаю vstest.console.exe для тестирования этих сборок.
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\..\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "Assembly1.UnitTest.dll" "Assembly2.UnitTest.dll" /Platform:x64 /Framework:Framework40 /InIsolation /Logger:trx
Это приводит к исключению: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'someassembly.dll' или одну из ее зависимостей. Указанный модуль не может быть найден.
Когда я выполняю vstest.console.exe для одной сборки модульных тестов, указанное выше исключение не возникает. Дальнейшие исследования показали, что при тестировании нескольких сборок одновременно vstest.console копирует тестовые сборки и зависимые сборки в каталог "out" в каталоге "testresults". Однако не все необходимые сборки ссылаются на проект, но вручную копируются в общий выходной каталог. Эти сборки отсутствуют в каталоге "out" в "testresults" и вызывают исключение System.IO.FileNotFoundException.
С помощью MSTest я мог бы использовать файл конфигурации, указывающий на общий выходной каталог, добавив DeploymentItem. Для vstest.console это больше не работает.
Что я могу сделать, чтобы обойти это поведение? Я не хочу работать с "вне" каталога. Запуск моих модульных тестов из общего каталога вывода - это нормально.
PS. У меня та же проблема на TFS 2013 с определениями сборки. Мои определения сборки собирают *.unittest.dll и выполняют их с помощью Test Runner.
1 ответ
Решение заключается в использовании файла.runsettings. В файле runsettings можно указать "DeploymentEnabled". По умолчанию это правда. Изменение в false не копирует все сборки в каталог out каталога TestResults. Дополнительная информация о файле настроек выполнения: http://msdn.microsoft.com/en-us/library/jj635153.aspx.
Пример:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!--Info: http://msdn.microsoft.com/en-us/library/jj635153.aspx -->
<MSTest>
<IgnoreTestImpact>True</IgnoreTestImpact>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>False</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>True</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
</MSTest>
</RunSettings>