Как использовать OpenCover и ReportGenerator для просмотра результатов покрытия модульных тестов?
Я новичок в использовании OpenCover и ReportGenerator, и я немного пытаюсь понять, как заставить их работать. Я использую VS.NET 2012 'Professional', что означает, что у меня нет доступа к встроенным инструментам покрытия модульных тестов. У меня также установлен ReSharper, но я не хочу платить за другую утилиту в 'dotCover'
Похоже, что OpenCover и ReportGenerator будут делать то, что мне нужно, и я вижу документацию, которая была загружена вместе, но мне не хватает понимания. Во-первых, когда я загружаю пакеты nuget для обоих, каким должен быть мой целевой проект? У меня есть многослойное приложение, поэтому я предполагаю, что мой проект модульного тестирования правильный, или это вообще имеет значение? Я вижу в документации, я просто указываю на / bin (я думаю) решения, использующего команды командной строки, поэтому, возможно, мне даже не нужно было добавлять эти загрузки в какой-либо конкретный проект (возможно, это был тестовый комплект)). Может кто-нибудь сказать мне, если я правильно понял?
После того, как я их установил, я пытаюсь получить показатели покрытия модульных тестов, и документы, поставляемые с пакетом, не так ясны, как я надеялся. Есть ли хорошие посты в блоге или ссылки, которые проходят через использование этого инструмента вместе, чтобы получить метрики?
5 ответов
Вам не нужно добавлять их в конкретный проект
Я также использую генератор отчетов и открытую обложку, чтобы получать результаты тестового покрытия. Это скрипт, который я использую для генерации покрытия кода с использованием open cover.
"C: \ Program Files (x86) \ OpenCover \ OpenCover.Console.exe" -register: user -target: "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ mstest.exe" -targetargs: "/ noisolation / testcontainer: \" C: \\ bin \ Debug \.dll \ "/resultsfile:C:\Reports\MSTest\.trx" -filter: "+ []" -mergebyhash -output: C: \ Отчеты \MSTest\projectCoverageReport.xml
Обратите внимание, что если вашему аргументу нужно экранировать кавычки, т.е. передавать аргументы с пробелами этому целевому процессу, вы можете использовать \ "ie -targetargs:"\"c:\program files\"
Это скрипт, который я использую для запуска генератора отчетов.
C: \ ReportGenerator \ bin \ ReportGenerator.exe -reports: "C: \ Reports \MSTest\projectCoverageReport.xml" -targetdir: "C: \ Reports \ CodeCoverage"
Надеюсь это поможет.
После нескольких лет использования этих инструментов с открытым исходным кодом я, наконец, создал исчерпывающую статью о том, как использовать OpenCover и ReportCover для генерации метрик покрытия модульных тестов.
В посте описывается, как создать .bat
файл и команды, необходимые для выполнения следующих действий:
- Генерация выходного отчета о показателях модульного теста с использованием OpenCover
- Генерация
.htm
отчет с помощью ReportGenerator - Анализ выходных данных для интерпретации показателей покрытия модульных тестов
Спасибо @atconway за ваш урок. Я немного обновил ваш скрипт.bat, чтобы облегчить будущие обновления и изменения проекта.
Подводя итог, чтобы использовать OpenCover с NUnit, вы должны добавить в свой проект следующие нюансы:
- OpenCover
- NUnit.ConsoleRunner
- Генератор отчетов Даниэль Пальме
и вот обновленный.bat файл. Чтобы запустить его, просто отредактируйте "настройки" и сохраните скрипт как файл.bat в корне вашего проекта.
@echo off
REM ** Be sure to install these nugets:
REM ** NUnit.ConsoleRunner
REM ** OpenCover
REM ** ReportGenerator
REM **
REM ** All paths should be entered without quotes
REM ** SET TestResultsFileProjectName=CalculatorResults
SET TestResultsFileProjectName=<ANY_NAME>
REM ** SET DLLToTestRelativePath=Calculator\bin\Debug\MyCalc.dll
SET DLLToTestRelativePath=<VALID_PATH>
REM ** Filters Wiki https://github.com/opencover/opencover/wiki/Usage
REM ** SET Filters=+[Calculator]* -[Calculator]CalculatorTests.*
SET Filters=<VALID_FILTERS>
SET OpenCoverFolderName=OpenCover.4.6.519
SET NUnitConsoleRunnerFolderName=NUnit.ConsoleRunner.3.6.1
SET ReportGeneratorFolderName=ReportGenerator.2.5.6
REM *****************************************************************
REM Create a 'GeneratedReports' folder if it does not exist
if not exist "%~dp0GeneratedReports" mkdir "%~dp0GeneratedReports"
REM Remove any previous test execution files to prevent issues overwriting
IF EXIST "%~dp0%TestResultsFileProjectName%.trx" del "%~dp0%TestResultsFileProjectName%.trx%"
REM Remove any previously created test output directories
CD %~dp0
FOR /D /R %%X IN (%USERNAME%*) DO RD /S /Q "%%X"
REM Run the tests against the targeted output
call :RunOpenCoverUnitTestMetrics
REM Generate the report output based on the test results
if %errorlevel% equ 0 (
call :RunReportGeneratorOutput
)
REM Launch the report
if %errorlevel% equ 0 (
call :RunLaunchReport
)
exit /b %errorlevel%
:RunOpenCoverUnitTestMetrics
"%~dp0packages\%OpenCoverFolderName%\tools\OpenCover.Console.exe" ^
-register:user ^
-target:"%~dp0packages\%NUnitConsoleRunnerFolderName%\tools\nunit3-console.exe" ^
-targetargs:"--noheader \"%~dp0%DLLToTestRelativePath%\"" ^
-filter:"%Filters%" ^
-mergebyhash ^
-skipautoprops ^
-excludebyattribute:"System.CodeDom.Compiler.GeneratedCodeAttribute" ^
-output:"%~dp0GeneratedReports\%TestResultsFileProjectName%.xml"
exit /b %errorlevel%
:RunReportGeneratorOutput
"%~dp0packages\%ReportGeneratorFolderName%\tools\ReportGenerator.exe" ^
-reports:"%~dp0GeneratedReports\%TestResultsFileProjectName%.xml" ^
-targetdir:"%~dp0GeneratedReports\ReportGenerator Output"
exit /b %errorlevel%
:RunLaunchReport
start "report" "%~dp0GeneratedReports\ReportGenerator Output\index.htm"
exit /b %errorlevel%
Это адская конфигурация opencover для нескольких тестовых контейнеров.
Используйте этот мой умный скрипт Powershell, он может дать вам некоторые идеи.
https://github.com/rpokrovskij/opencover4vs.ps1/blob/master/opencover4vs.ps1
вам нужно настроить две основные вещи: как найти ваши тестовые библиотеки и какие пространства имен включить в вывод. Я делаю это так:
$TestDllsPatterns = @(,'*\bin\Debug\Vse.*.Test.dll')
$TestableCodeNamespacePatterns = @(,'*')
Обратите внимание, мои тесты начинаются с префикса Все. Вам нужно Debug\Prefix
ключ для фильтрации основных тестов nUnit из таких папок, как Debug\netcore1.1\Vse
,
Мне пришлось установить OpenCover из msi или шоколадного пакета, потому что, когда я пытаюсь запустить команду OpenCover с помощью исполняемого файла пакета Nugget, выдает следующую ошибку:
Фиксация ... Нет результатов, это могло быть по ряду причин. Наиболее частые причины:1) отсутствие PDB для сборок, соответствующих фильтру. Просмотрите выходной файл и обратитесь к руководству по использованию (Usage.rtf) о фильтрах. 2) профилировщик может быть неправильно зарегистрирован, обратитесь к руководству по использованию и переключателю -register.