Проблема с исключением классов из отчета о покрытии кода OpenCover с использованием ExcludeFromCodeCoverageAttribute Visual Studio 2019 Pro

Я использую Visual Studio 2019 Professional. Около полутора лет я регулярно составлял отчеты о покрытии кода, запуская пакетный файл, который вызывает OpenCover для запуска анализа, а затем запускает ReportGenerator для обработки данных в хороший отчет. Это работает просто отлично.

Но меня всегда беспокоило, что у меня есть несколько классов объектов, которые, наверное, не стоит включать в отчет, так как они просто состоят из кучи свойств с геттерами и сеттерами. Итак, вчера я читал о том, как удалить такие классы из результатов OpenCover.

Я применил атрибут [ExcludeFromCodeCoverage] к двум классам, просто для начала. Затем я изменил единственную строку командного файла, которая вызывает OpenCover, следующим образом:

"%~dp0packages\OpenCover.4.7.922\tools\OpenCover.Console.exe" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\MSTest.exe" -targetargs:"/testcontainer:\"%~dp0UnitTestProject1\bin\Debug\AppTESTS.dll\"" -skipautoprops -excludebyattribute:"System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage*" -hideskipped:All -output:"%~dp0GeneratedReports\Raw_Report.xml"

Обратите внимание, что единственными фактическими ИЗМЕНЕНИЯМИ, которые я внес в эту строку, были:

  • -skipautoprops
  • -excludebyattribute:System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage*
  • -скрыть: все

Теперь основная проблема связана с атрибутом -excludebyattribute.
Я пробовал разные варианты:

  • *.ExcludeFromCodeCoverage*
  • *.ExcludeFromCodeCoverageAttribute
  • System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute
  • (и, возможно, некоторые другие, которые я забыл)

И я все еще вижу два класса, которые пытаюсь исключить из вывода.

Отчаянно пытаюсь понять, что я здесь делаю не так.

Может ли тот факт, что я работаю в Visual Studio 2019 Professional, которая на самом деле не включает встроенную функцию/окно покрытия кода Visual Studio, иметь какое-то отношение к этому? Я имею в виду, что единственная претензия Visual Studio к двум добавленным атрибутам [ExcludeFromCodeCoverage] заключалась в том, что мне нужно было добавить использование System.Diagnostics.CodeAnalysis; каждому из двух файлов.

Спасибо!


person DaveyBoy    schedule 09.12.2020    source источник


Ответы (1)


Итак, я решил проверить это, используя рекомендацию из документации по использованию OpenCover (https://github.com/opencover/opencover/blob/master/main/OpenCover.Documentation/Usage.pdf): создание совершенно НОВОГО атрибута и использование его вместо него.

Я создал класс ExcludeFromOpenCoverReportAttribute. Изменены ссылки на эти два тестовых класса на [ExcludeFromOpenCoverReport]. Изменено значение параметра excludebyattribute следующим образом:

   -excludebyattribute:"*.ExcludeFromOpenCoverReport*"

Запустил пакетный файл. И теперь OpenCover (точнее, ReportGenerator) больше не показывает эти два класса.

Я могу только сделать вывод, что использование атрибута ExcludeFromCodeCoverage .NET Framework не работает в Visual Studio 2019 Pro, поскольку полная функциональность покрытия кода в Visual Studio не включена в версии Pro (но включена в версии Enterprise).

Спасибо!

person DaveyBoy    schedule 09.12.2020