[Перевод] Покрытие кода: как улучшить качество тестирования

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

vznzvepmfccgwctmzkuymodhll0.jpeg

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

Ранее на этой неделе я ознакомился с 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 весит почти полмегабайта! В нем много полезной информации, но как я могу увидеть результаты в читаемом виде?

lotohpdaa7n5wuoykz88xqf0k-i.png

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

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

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


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

rmbf46gipyn35bl3smyhbia3ads.png

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

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

setjcpwjjwhrhexqtkrj1dodwwa.png

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


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

© Habrahabr.ru