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

У меня есть проект с классами и методами, которые я хочу протестировать. У меня есть еще один проект с методами тестирования, которые будут проверять методы моего основного проекта.

Я запускаю тесты с помощью opencover и генерирую отчеты с помощью генератора отчетов с помощью этих команд, которые у меня есть в файле .bet:

..\tools\OpenCover.Console.exe -register:user -target:"C:\myDllWithTests.dll" -output:"c:\coverage\opencovertests.xml"

.\ReportGenerator.exe "-reports:c:\coverage\opencovertests.xml" "-targetdir:c:\coverage\opencovertests.xml\reports"

Я использую MSTest для тестирования.

Проблема в том, что в отчете html я вижу, что охваченный код - это методы тестов, а не методы в моем тестовом основном проекте.

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

Спасибо.


person Álvaro García    schedule 28.05.2017    source источник


Ответы (2)


В аргументе target для OpenCover укажите путь к MSTest (например, "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe") и укажите свои тестовые сборки (например, "C:\myDllWithTests.dll ") в targetargs аргументе.

Чтобы удалить тестовые сборки из статистики покрытия кода, укажите их в аргументе фильтра. .

Ниже приведена команда OpenCover, которая у меня отлично работает. Здесь тестируемый код помещается в SampleApp.dll, а тестовый код — в SampleApp.Tests.dll.

.\OpenCover.Console.exe -register:user -mergebyhash -target:"c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe" -targetargs:"/testcontainer:\"d:\test\SampleApp\SampleApp.Tests\bin\Debug\SampleApp.Tests.dll\"" -output:UTResults.xml -filter:"+[SampleApp*]* -[SampleApp.Tests]*"

Отчет о результатах содержит только статистику для сборки SampleApp.dll, SampleApp.Tests.dll исключен:

введите здесь описание изображения

Проверьте этот ответ, чтобы узнать больше. Существует также замечательная статья Аллена. Конвей об использовании OpenCover и ReportGenerator для проектов .Net.

person CodeFuller    schedule 28.05.2017
comment
Я попытался добавить targetargs, но результат тот же. О статье я знал, но он не предложил исходный код, и у меня есть сомнения, находятся ли тесты в той же dll, что и основной код, или это другая dll. Потому что в моем случае проблема в том, что я получаю покрытие только тестовой сборки, а не основной сборки. - person Álvaro García; 28.05.2017
comment
Я пробовал использовать этот фильтр: -filter:+[*]* -[*Tests]* -mergebyhash, но он не включает main.dll, который находится в той же папке, что и test.dll. Также я пробовал с полным именем основной dll, и все равно это не работает. - person Álvaro García; 28.05.2017
comment
Может проблема не в OpenCover, а в самих тестах. Что выдает MSTest? Вы видите статистику по выполненным тестам, например. 1/1 тестов Пройдено? - person CodeFuller; 28.05.2017
comment
Да, я вижу название запущенных тестов и количество пройденных и непройденных тестов. - person Álvaro García; 28.05.2017
comment
Я думаю, opencover совместим со стандартом .net? - person Álvaro García; 28.05.2017
comment
Я уверен, что opencover еще не совместим со стандартом .net. Я попробовал то же самое с проектом .net framework, и он работает так, как ожидалось. - person Álvaro García; 28.05.2017

Это может быть довольно поздний ответ здесь, но я провел час или два, играя с этим, и обнаружил, что следующее исправит это. Стоит отметить, что у меня был исходный скрипт bat из другого проекта, который, как я знаю, работает, и я просто изменил имя файла DLL, так что я знаю, что скрипт был в порядке.

Дополнительная проверка:

  1. Щелкните правой кнопкой мыши проект с исходным кодом, который вы хотите отобразить в отчете о покрытии (не проект модульного тестирования), и выберите Свойства.
  2. Выберите СборкаВыводДополнительно.
  3. Установите для параметра Отладочная информация значение Полный.
  4. Пересоберите решение и повторно запустите файл bat.

У меня работает в Visual Studio 2019 с проектами .NET Framework 4.7.2.

person Mike Upjohn    schedule 19.11.2020