Запуск MsTest из командной строки с пользовательским базовым каталогом сборки
Я провел довольно много исследований в интернете и попробовал несколько настроек, но не смог воспроизвести поведение запуска MsTest в Visual Studio 2012 в командной строке.
наше решение состоит из многих проектов, которые строятся в одной папке bin, находящейся на уровне решения (например C:MySolutionbin) - это тестируемый код (CUT). Тесты группируются в отдельный проект, который находится в собственном решении и строится в собственной папке bin (например C:MySolutionTestsbin). Существует действительно много плагинов, поэтому мы хотим, чтобы MsTest ссылался на папку CUT bin при запуске теста intead копирования всего в папку TestResults. Мы достигли этого в Visual Studio 2012 путем редактирования .testrunconfig и указание ". bin "as"корневая папка для загружаемых сборок "(во вкладке "модульный тест" при редактировании testrunconfig). Таким образом, мы можем загрузить тестовое решение в VS2012 и запустить тесты там без необходимости копировать содержимое папки bin в каталог TestResults.
теперь я хотел создать .файл bat, который будет запускать MsTest так же, как и в VS2012, чтобы мы могли опустить запуск Visual Studio только для запуска тестов. Теперь я работаю над тем, как выполнить MsTest в командной строке, но был довольно разочарован. Это то, что я пробовал (команда выполняется на уровне решения в командной строке VS):
программы MSTest /testcontainer: тестыbinтесты.dll файлы
это не сработало вообще, он даже не мог найти ссылочные библиотеки DLL, которые тестируются.dll нужно запустить. Поэтому я повторно использовал конфигурацию и снова запустил ее:
MsTest / runconfig:LocalTestRun.testrunconfig / testcontainer:тестыbinтесты.dll файлы
все равно это не сработало. Он мог начать тесты, но все они провалились. Я получил много предупреждений такого рода
Предупреждение: Тестовый Запуск проблема развертывания: сборка или модуль".... прямо или косвенно ссылаются C:MySolutionTestsbintests тестовый контейнер '.dll ' не найден.
и в конце концов он сказал:
настроенный каталог базы приложений 'C:MySolutionTestResultsUser_Machine 2013-07-28 13_16_59Outbin' не существует. Вместо этого будет использоваться тестовый каталог.
когда я изменил параметр applicationBaseDirectory
в testrunconfig для абсолютный путь (C:MySolutionbin),он работал. Тем не менее я получаю много предупреждений, таких как:
предупреждение: проблема развертывания тестового запуска: сборка или модуль".... прямо или косвенно ссылаются C:MySolutionTestsbintests тестовый контейнер '.dll ' не найден.
но в любом случае, это не совсем возможное решение для указания абсолютного пути. как я могу запустить MsTest в командной строке с другим, но относительным каталог сборочной базы?
Мой LocalTestRun.testrunconfig выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Local Test Run" id="...." xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>This is a default test run configuration for a local test run.</Description>
<Deployment>
<DeploymentItem filename="Tests....Resources" />
</Deployment>
<Execution hostProcessPlatform="MSIL">
<TestTypeSpecific>
<UnitTestRunConfig testTypeId="....">
<AssemblyResolution applicationBaseDirectory=".bin">
<TestDirectory useLoadContext="true" />
</AssemblyResolution>
</UnitTestRunConfig>
<WebTestRunConfiguration testTypeId="....">
<Browser name="Internet Explorer 7.0">
<Headers>
<Header name="User-Agent" value="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" />
<Header name="Accept" value="*/*" />
<Header name="Accept-Language" value="{{$IEAcceptLanguage}}" />
<Header name="Accept-Encoding" value="GZIP" />
</Headers>
</Browser>
</WebTestRunConfiguration>
</TestTypeSpecific>
<AgentRule name="LocalMachineDefaultRole">
</AgentRule>
</Execution>
</TestSettings>
2 ответов
после дополнительного поиска мы изменили, чтобы использовать test console runner, который входит в VS2012:
VSTest.Приставка.exe тесты\bin\тесты.dll / Framework:framework40 /настройки: LocalTestRun.testrunconfig по
это работает с относительным путем, как applicationBaseDirectory
.
это связано с ошибкой MSTest, которая устанавливает текущий каталог в свой собственный рабочий каталог, а не папку bin (или развертывания) тестового проекта. Обходным путем является выполнение следующего кода в конструкторе вашего тестового класса:
Environment.CurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
Я получил идею от http://www.ademiller.com/blogs/tech/2008/01/gotchas-mstest-appdomain-changes-in-vs-2008/; однако обратите внимание, что в моем случае, по крайней мере, это требовало настройки среды.Текущей каталог, а не наоборот, как предлагается в статье.