Наш коллега, Скотт Хансельман, продолжает изучать тестирование и покрытие кода в .NET Core. Он уже успел рассказать о некоторых инструментах для улучшения качества тестирования, и сегодня рассказывает еще об одном: AltCover. Заглядывайте под кат!



Передаю слово Скотту Хансельману.

Ранее на этой неделе я ознакомился с coverlet. Существуют также уважаемый всеми инструмент OpenCover и несколько интересных проектов, в которых пытаются заставить OpenCover работать с .NET Core, но только в Windows.

Сегодня я буду изучать AltCover Стива Гилхама (Steve Gilham). Существуют инструменты для определения покрытия, которые используют .NET Profiling API во время выполнения. AltCover же, напротив, обращается для этого к IL.

Как следует из названия, это альтернативный подход к покрытию. Вместо того чтобы работать через .NET-API профилирования во время выполнения, он добавляет такой же дополнительный IL в то, что мы хотим собрать, еще до выполнения. Это означает, что он должен работать практически везде, на любой платформе, до тех пор пока процесс выполнения имеет доступ к изменению файла результатов. Вы можете комбинировать различные платформы, используемые для инструментирования, и те, что тестируются.

AltCover входит не только в пакет NuGet, но и доступен в составе .NET Core Global Tool, что просто замечательно.

dotnet tool install --global altcover.global

Это позволяет использовать команду altcover в любом месте, не добавляя ее в проект.

И все-таки я собираюсь пройтись по руководству по быстрой настройке AltCover и посмотреть, как быстро я смогу это сделать!

Я установлю его в свой тестовый проект hanselminutes.core.tests,

dotnet add package AltCover

а затем запущу.

dotnet test /p:AltCover=true

Отлично. Мои тесты выполняются как обычно, но теперь у меня есть файл test.xml в тестовой папке. При желании я мог бы также сгенерировать отчеты LCov или Cobertura. Уже сейчас файл coverage.xml весит почти полмегабайта! В нем много полезной информации, но как я могу увидеть результаты в читаемом виде?



Файл имеет формат OpenCover XML, поэтому я могу запустить ReportGenerator для файла покрытия и получить целую кучу HTML-файлов. По сути, целый мини-сайт покрытия!

Я скачал ReportGenerator и поместил его в отдельную папку (это лучшее решение для .NET Core Global Tool).

c:\ReportGenerator\ReportGenerator.exe -reports:coverage.xml -targetdir:./coverage

Убедитесь, что вы используете хороший targetDir, иначе получите десятки ненужных файлов HTML в папке проекта. Также стоит подумать о том, чтобы применить .gitignoring для итоговой папки и файла покрытия. Откройте index.htm и оцените всю эту полезную информацию!



Обратите внимание на Risk Hotspots сверху! У меня есть CustomPageHandler со значительной сложностью NPath и два представления со значительной цикломатической сложностью.

Также оцените отличное покрытие путей, как указано здесь, в результатах отчета о покрытии. Можно заметить, что EnableAutoLinks всегда было истинным, поэтому я проверил только один путь. Возможно, я выполню здесь отрицательный тест и посмотрю, возникнут ли какие-либо побочные эффекты, если EnableAutoLinks будет ложным.



Изучите полное руководство по использованию AltCover. Существует множество способов запустить этот инструмент, от глобальных средств Global Tools, тестов dotnet, задач MSBuild до интеграции с PowerShell!


Здесь очень много хороших примеров, и мне потребовалось буквально 10 минут, чтобы получить превосходный отчет о покрытии с помощью AltCover и .NET Core. Спасибо Стиву из AltCover! Посетите github.com/SteveGilham/altcover, чтобы поставить ему звездочку, оповестить о проблемах с файлами или предложить помощь! И главное, делитесь проектами с открытым кодом, подобными этому, с друзьями и коллегами.

Комментарии (0)