Запуск 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/; однако обратите внимание, что в моем случае, по крайней мере, это требовало настройки среды.Текущей каталог, а не наоборот, как предлагается в статье.