Подтвердить что ты не робот

Как использовать OpenCover и ReportGenerator для просмотра Unit Test результатов покрытия?

Я noob для использования OpenCover и ReportGenerator, и я немного борюсь за понимание того, как заставить их работать. Я использую VS.NET 2012 'Professional', что означает, что у меня нет доступа к встроенному инструменту покрытия unit test. Я также установил ReSharper, но не хочу платить за другую утилиту в "dotCover"

Похоже, что OpenCover и ReportGenerator будут делать то, что мне нужно, и я вижу документацию, которая была загружена вместе, но мне не хватает понимания. 1-й, когда я загружаю пакеты nuget для обоих, каков должен быть мой целевой проект? У меня многоуровневое приложение, поэтому я предполагаю, что мой проект unit test прав, или это даже имеет значение? Я вижу в документации, я просто указываю на /bin (я думаю) на решение, используя команды командной строки, поэтому, возможно, мне даже не нужно было добавлять эти загрузки в какой-либо конкретный проект (возможно, это был тестовый жгут). Может кто-нибудь сказать мне, если у меня это правильно?

Как только я их установил, я пытаюсь получить метрики покрытия unit test, а документы, которые поставляются вместе с пакетом, не так ясны, как я надеялся. Есть ли хорошие сообщения в блоге или ссылки, которые проходят через этот инструмент вместе, чтобы получить метрики?

4b9b3361

Ответ 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.