[Перевод] Покрытие кода: как улучшить качество тестирования
Наш коллега, Скотт Хансельман, продолжает изучать тестирование и покрытие кода в .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, чтобы поставить ему звездочку, оповестить о проблемах с файлами или предложить помощь! И главное, делитесь проектами с открытым кодом, подобными этому, с друзьями и коллегами.