Запуск модульных тестов MSTest в составе TeamBuild - PullRequest
2 голосов
/ 01 сентября 2010

Я искал определенный веб-ресурс, чтобы помочь с этим, но пока не повезло.Итак, как мне запустить модульные тесты как часть сборки TFS?У меня есть несколько вопросов для этого, поэтому, чтобы упростить их, я пронумеровал их в этом посте.Извините за длину этого сообщения.

Visual Studio Team System 2008 установлена ​​на моей сборочной машине.

У меня есть файл TFSBuild.proj, который я установил на <RunTest>true</RunTest>.Для этого я добавил

<ItemGroup>
  <TestContainer Include="'C:\MyBuild\Binaries\Debug\MyUnitTests.dll" />
</ItemGroup>

MyUnitTests - это проект модульного тестирования в решении.

Решение построено правильно, но шаг Выполнить модульное тестирование завершается неудачно с ошибкой:

(цель CoreTestConfiguration) -> Невозможно загрузить тестовый контейнер 'C: \ MyBuild \Binaries \ Debug \ MyUnitTests.dll 'или одна из его зависимостей.подробности предупреждения:

Фактические подробности предупреждения не следуют.Я заметил, что путь к файлу, похоже, содержит неправильные пробелы - C : \MyBuild\Binaries\Debug\ в сообщении.Фактический путь C:\MyBuild\etc.

  1. Может ли быть так, что OutDir как-то настроен на неправильный путь?Как определить, на каком компьютере установлена ​​моя цель OutDir?

Чтобы убедиться, что это не просто неверно заданный путь к файлу, я просто попытался жестко запрограммировать его вTestContainer:

<ItemGroup>
  <TestContainer Include="'C:\MyBuild\Binaries\Debug\MyUnitTests.dll" />
</ItemGroup>

Сообщение об ошибке было идентичным.Я пытался запустить другие тесты из файла vsmdi:

<MetaDataFile Include="$(SolutionRoot)\MySolution\MySolution.vsmdi">
</MetaDataFile>

На этот раз появилось другое сообщение об ошибке:

(цель CoreTestConfiguration) -> MSBUILD: предупреждение MSB6006: «MSTest.exe» завершен с кодом 1.

Что здесь происходит? А почему я не вижу подробностей в сообщениях об ошибках для юнит-тестов?Это потому, что у меня не установлена ​​версия Studio 2008 Team System (Developer или Tester)?

Я также хотел бы спросить об указании элементов развертывания для запуска тестов в сборке.При запуске из Visual Studio мои модульные тесты имеют элементы развертывания, указанные в localtestrun.testrunconfig.

Как убедиться, что они развернуты, когда модульные тесты выполняются как часть сборки?

Как мне записать вывод MSTest в файл при запуске сборки?То есть MSTest запускается с параметром командной строки /resultsfile:myfile.trx?

Есть ли какой-либо рекомендуемый веб-ресурс, чтобы узнать о интеграции модульных тестов в сборку?

Обновление (1 деньпозже)

Мне удалось запустить модульные тесты как часть сборки, но с проблемами.Вот что я нашел до сих пор

  1. Мне не удалось заставить его работать с использованием синтаксиса, который должен просто запускать все модульные тесты в проекте.Вместо этого мне пришлось создать тестовый список и запустить его, ссылаясь на файл vsmdi.Это не сработало - ни одного модульного теста не было:

Это сработало:

<ItemGroup>
  <MetaDataFile Include="$(SolutionRoot)\$(ReleaseName)\$(BranchName)\TheApplication\TheApplication.vsmdi">
    <TestList>TestsForTheBuild</TestList>
    <TestRunConfig>$(SolutionRoot)\$(ReleaseName)\$(BranchName)\TheApplication\LocalTestRun.testrunconfig</TestRunConfig>
  </MetaDataFile>
</ItemGroup>
Существовали значительные различия в выполнении тестов в Visual Studio IDE и использовании MSTest для их выполнения.Проблема заключалась в ссылках на проекты - MSTests не будет развертывать какие-либо ссылки, которые в проекте модульного теста считаются «неиспользуемыми ссылками», в то время как Visual Studio IDE будет.

Большая часть кода, который я тестирую, динамически создает объекты с помощью блока приложения Unity.Для того чтобы их можно было создать, библиотеку, в которой они определены, необходимо включить в проект в качестве ссылки.Поскольку объекты создаются с помощью Reflection только во время выполнения, насколько компилятор может видеть, что они являются неиспользованными ссылками.

Когда Visual Studio запускает тесты, все ссылки, независимо от того, используются они или нет, компилируются и копируются в каталог Out, из которого запускаются тесты. Когда MSTest.exe запускает тесты, он не развертывает никаких «неиспользуемых» ссылок. Мне потребовалось несколько часов, чтобы обнаружить библиотеки, которые были ссылками проекта в проекте модульных тестов, просто не находились в каталоге Out, когда MSTest выполнял тесты. , Это было из-за этой проблемы «неиспользованной ссылки».

Чтобы решить эту проблему: включите dll «неиспользуемые ссылки» в качестве элементов развертывания в файл testrunconfig. Это заставит их скопировать.

  1. Следующая обнаруженная мною проблема заключается в том, что некоторые модульные тесты не выполняются, когда в одной сборке компилируется несколько файлов решений. Я нашел два «аромата» этой проблемы. а. Модульные тесты вообще не запускались, если только решение, с которым они связаны, не было последним файлом решения в списке решений для компиляции. Например, если это была моя группа «SolutionToBuild» и у меня были модульные тесты, относящиеся к SolutionTwo, они просто не запускались.

Чтобы они начали работать, мне пришлось переместить SolutionTwo в конец списка.

б. С тремя решениями в сборке мои модульные тесты запускаются, но многие тесты не проходят. Если я удаляю два других решения из сборки, все модульные тесты проходят. Это несмотря на то, что модульные тесты не имеют ничего общего с двумя другими решениями.

Я разобрался с ответами на мои вопросы 2 и 3 и 4 выше. 2. 2. Вы не видите никаких деталей в выводе сборки для запуска модульных тестов. Вы только видите, прошел ли пробег или потерпел неудачу. 3. Чтобы увидеть результаты отдельных тестов, вы должны увидеть каталог TestResults и файл .trx, которые MSTest генерирует при запуске сборки. 4. Все, что помечено как элемент развертывания в вашем файле testrunconfig, будет развернуто: я был озадачен, когда задал вопрос из-за проблемы неиспользованных ссылок в MSTest.

1 Ответ

1 голос
/ 02 сентября 2010

Я считаю трехступенчатое исключение полезным:

  1. Работают ли тесты в среде Visual Studio dev?

  2. Работают ли тестыв msbuild локально?

  3. Тесты выполняются в msbuild на сервере сборки?

Я использую приведенный ниже скрипт build.cmd для запуска msbuildна моей локальной машине в среде, которая очень близко соответствует тому, что будет использоваться сервером сборки TFS.

сценарий build.cmd

@setlocal

SET MSBUILDVER=v4.0.30319 
SET MSBUILDEXE=%FrameworkDir%%MSBUILDVER%\MSBuild.exe
SET builduri=local

%MSBUILDEXE% BuildDefinitions\TFSBuild.proj %*

ПРИМЕЧАНИЕ. Этот сценарий должен запускаться из VisualОкно командной строки Studio 2010:

Пуск -> Все программы -> Microsoft Visual Studio 2010 -> Инструменты Visual Studio -> Командная строка Visual Studio (2010)

В общем случае установка значения true вTFSBuild.proj должен заставить модульные тесты запускаться автоматически в любых решениях, перечисленных в сборке, но похоже, что это не работает для вас?

Что произойдет, если вы передадите параметр командной строки / p: RunTest = true дляmsbuild из командной оболочки?

YВы должны иметь возможность добавлять настраиваемые параметры командной строки сборки TFS в сборку сервера через файл TFSBuild.rsp, если это необходимо, но в действительности не требуется для RunTest.

Сервер сборки TFS должен автоматически создавать результаты .trxfile - проверьте результаты сборки через Build Explorer в Visual Studio - View Test Results откроет файл .trx в VS.

Не уверен насчет решений ваших других конкретных проблем, но я бы попробовал запуститьвстроить в командное окно локально, чтобы получить более четкое представление о том, что происходит во время сборки.Сообщения об ошибках будут отображаться в виде красного текста, предупреждающие сообщения - в виде желтого текста, а многие другие промежуточные сведения о шагах сборки - в виде серого текста.

Существует множество хороших сообщений в блоге о темах сборки TFS - блог Аарона Холлберга(blogs.msdn.com/b/aaronhallberg) было бы хорошим началом.Кроме того, в MSDN есть много полезной информации о сборке TFS / MS - например: Запуск сборок в Team Foundation Build

...