Как использовать OpenCover и ReportGenerator для просмотра Unit Test результатов покрытия?
Я noob для использования OpenCover и ReportGenerator, и я немного борюсь за понимание того, как заставить их работать. Я использую VS.NET 2012 'Professional', что означает, что у меня нет доступа к встроенному инструменту покрытия unit test. Я также установил ReSharper, но не хочу платить за другую утилиту в "dotCover"
Похоже, что OpenCover и ReportGenerator будут делать то, что мне нужно, и я вижу документацию, которая была загружена вместе, но мне не хватает понимания. 1-й, когда я загружаю пакеты nuget для обоих, каков должен быть мой целевой проект? У меня многоуровневое приложение, поэтому я предполагаю, что мой проект unit test прав, или это даже имеет значение? Я вижу в документации, я просто указываю на /bin (я думаю) на решение, используя команды командной строки, поэтому, возможно, мне даже не нужно было добавлять эти загрузки в какой-либо конкретный проект (возможно, это был тестовый жгут). Может кто-нибудь сказать мне, если у меня это правильно?
Как только я их установил, я пытаюсь получить метрики покрытия unit test, а документы, которые поставляются вместе с пакетом, не так ясны, как я надеялся. Есть ли хорошие сообщения в блоге или ссылки, которые проходят через этот инструмент вместе, чтобы получить метрики?
Ответы
Ответ 1
вам не нужно добавлять их в конкретный проект
Я использую генератор отчетов и открытую обложку для получения результатов тестирования. Это script, который я использую для создания codecoverage с использованием opencover
"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 \. длл \ "/resultsfile:C:\Reports\MSTest\.trx" -filter: "+ []" -mergebyhash -output: C:\Reports\MSTest\projectCoverageReport.xml
Обратите внимание, что если ваш аргумент должен избегать кавычек, то есть передавать аргументы с пробелами в этот целевой процесс, вы можете использовать \ "i.e. -targetargs:" \ "c:\program files \"
Это script, который я использую для запуска генератора отчетов.
C:\ReportGenerator\Bin\ReportGenerator.exe -reports: "C:\Reports\MSTest\projectCoverageReport.xml" -targetdir: "C:\Reports\CodeCoverage"
Надеюсь, что это поможет.
Ответ 2
После нескольких лет использования этих инструментов с открытым исходным кодом я, наконец, создал всеобъемлющую статью о том, как использовать OpenCover и ReportCover для генерации метрик покрытия unit test.
Сообщение описывает, как создать файл .bat
и команды, необходимые для выполнения следующих действий:
- Сгенерировать выходной отчет unit test с помощью OpenCover
- Создание отчета
.htm
с помощью ReportGenerator
- Анализ выходных данных для интерпретации метрик покрытия unit test
Использование OpenCover и ReportGenerator для получения метрик охвата кода тестирования модуля в .NET
Ответ 3
Спасибо @atconway за ваш учебник.
Я немного обновил ваш .bat script, чтобы облегчить будущие обновления и изменения проекта.
Подводя итоги, чтобы использовать OpenCover с NUnit, вы должны добавить в свой проект эти nugets:
- OpenCover
- NUnit.ConsoleRunner
- ReportGenerator от Daniel Palme
и здесь обновлен .bat файл.
Чтобы запустить его, просто отредактируйте "настройки" и сохраните script как .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%
Ответ 4
Это ад, чтобы настроить opencover для нескольких тестовых контейнеров.
Используйте эту интеллектуальную Powershell script, она может дать вам некоторые идеи.
https://github.com/rpokrovskij/opencover4vs.ps1/blob/master/opencover4vs.ps1
вам нужно настроить две основные вещи: как найти тестовые DLL и какие пространства имен включить в вывод. Я делаю это так:
$TestDllsPatterns = @(,'*\bin\Debug\Vse.*.Test.dll')
$TestableCodeNamespacePatterns = @(,'*')
Заметьте, мои тесты начинаются с префикса Vse. Вам нужна клавиша Debug\Prefix
, чтобы отфильтровать тесты ядра nUnit из таких папок, как Debug\netcore1.1\Vse
.