Я искал определенный веб-ресурс, чтобы помочь с этим, но пока не повезло.Итак, как мне запустить модульные тесты как часть сборки 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
.
- Может ли быть так, что
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 деньпозже)
Мне удалось запустить модульные тесты как часть сборки, но с проблемами.Вот что я нашел до сих пор
Мне не удалось заставить его работать с использованием синтаксиса, который должен просто запускать все модульные тесты в проекте.Вместо этого мне пришлось создать тестовый список и запустить его, ссылаясь на файл 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. Это заставит их скопировать.
Следующая обнаруженная мною проблема заключается в том, что некоторые модульные тесты не выполняются, когда в одной сборке компилируется несколько файлов решений. Я нашел два «аромата» этой проблемы.
а. Модульные тесты вообще не запускались, если только решение, с которым они связаны, не было последним файлом решения в списке решений для компиляции. Например, если это была моя группа «SolutionToBuild» и у меня были модульные тесты, относящиеся к SolutionTwo, они просто не запускались.
Чтобы они начали работать, мне пришлось переместить SolutionTwo в конец списка.
б. С тремя решениями в сборке мои модульные тесты запускаются, но многие тесты не проходят. Если я удаляю два других решения из сборки, все модульные тесты проходят. Это несмотря на то, что модульные тесты не имеют ничего общего с двумя другими решениями.
Я разобрался с ответами на мои вопросы 2 и 3 и 4 выше. 2.
2. Вы не видите никаких деталей в выводе сборки для запуска модульных тестов. Вы только видите, прошел ли пробег или потерпел неудачу.
3. Чтобы увидеть результаты отдельных тестов, вы должны увидеть каталог TestResults и файл .trx, которые MSTest генерирует при запуске сборки.
4. Все, что помечено как элемент развертывания в вашем файле testrunconfig, будет развернуто: я был озадачен, когда задал вопрос из-за проблемы неиспользованных ссылок в MSTest.