Как измерить покрытие кода в ASP.NET основные проекты в Visual Studio?

Я хочу измерить охват кода моих XUnit-тестов в ASP.NET основное приложение. Инструментарий для .NET Core в Visual Studio 2015-это preview 2, и покрытие кода пока не работает.

сообщение в блогеhttp://dotnetthoughts.net/measuring-code-coverage-of-aspnet-core-applications-using-opencover/ с февраля показывает обходной путь с помощью командной строки open cover. Я ищу более интегрированный способ внутри Visual Studio.

кто-нибудь слышал о лучшем / более интегрированном способе измерения покрытия кода в сочетании с XUnit ?

6 ответов


добавить пакета NuGet Microsoft.CodeCoverage 1.0.1 на project.json.

Я работаю над шаблоном для Asp.NET и прямо сейчас я работаю над модульными тестами, поэтому я видел ваш пост. Вы можете увидеть project / configuration здесь.


отказ от ответственности: эти шаги были даны из измерение ASP.NET покрытие ядра с помощью OpenCover-DotNetThoughts.

несмотря на то, что плакат говорит об этом сайте, я подумал, что все равно было бы лучше иметь эти шаги здесь для процветания.

Примечание: эти инструкции, адаптированные к операционной системе windows, должны легко работать для любых O / S, поддерживаемых OpenCover и ReportGenerator.

  1. создать твой ASP.NET основной сайт MVC
  2. обеспечить глобальную.json имеет "тест" в проектах
  3. щелкните правой кнопкой мыши тестовую папку в решении и добавьте новый проект
  4. убедитесь, что тип проекта является библиотекой классов .NET Core
  5. добавьте в свой проект следующее.узел зависимостей json:
    • "dotnet-test-xunit": "2.2.0-preview2-build1029",
    • "в xUnit": "2.2.0-beta3 в-build3402"
    • " Microsoft.CodeCoverage": "1.0.2"
  6. добавьте в свой проект следующее.в JSON по версии
    • "testRunner": "xunit",
  7. напишите модульные тесты
  8. скачать OpenCover и Генератор Отчетов
  9. Установить OpenCover
  10. извлечь генератор отчетов в OpenCover установить dir в папке под названием генератор отчетов
  11. создайте файл BAT в своем проекте и вызовите его покрытие.летучая мышь!--16-->
  12. добавить следующее содержание:
@echo off

SET dotnet="C:\Program Files\dotnet\dotnet.exe"  
SET opencover="C:\Program Files (x86)\OpenCover\OpenCover.Console.exe"
SET reportgenerator="C:\Program Files (x86)\OpenCover\ReportGenerator\ReportGenerator.exe"

SET targetargs="test"  
SET filter="+[*]NAMESPACE.* -[*.Test]* -[xunit.*]* -[FluentValidation]*"  
SET coveragefile=Coverage.xml  
SET coveragedir=Coverage

REM Run code coverage analysis  
%opencover% -oldStyle -register:user -target:%dotnet% -output:%coveragefile% -targetargs:%targetargs% -filter:%filter% -skipautoprops -hideskipped:All

REM Generate the report  
%reportgenerator% -targetdir:%coveragedir% -reporttypes:Html;Badges -reports:%coveragefile% -verbosity:Error

REM Open the report  
start "report" "%coveragedir%\index.htm"
  1. замените пространство имен пространством имен проектов.
  2. если несколько проектов, дублируйте регулярное выражение +[*]NAMESPACE.* столько раз, сколько необходимо для каждого пространства имен
  3. сохраните файл
  4. Откройте командную строку и убедитесь, что в тестовом проекте
  5. введите обложку, чтобы запустить модульные тесты и результаты покрытия в формате HTML или что угодно назвал ваш файл bat на шаге 11.

codecoverage работает для меня, для .Net Core с помощью Microsoft.CodeCoverage Как уже упоминалось выше.

Проверьте Microsoft.CodeCoverage nuget добавлен в ваш тестовый проект

также проверьте проект.JSON-файл в главном проекте, атрибут debugType должен быть " полным "вместо"portable"

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "debugType": "full"
  },

исправлено для меня


покрывало (https://github.com/tonerdo/coverlet) это новый проект, который недавно появился. Он работает вместе с msbuild и дает прямое решение для покрытия


Я просто попытался для ReSharper версия 2016.3 ВП 4 (улучшения). Кроме выполнения модульного теста теперь dotCover возвращает информацию о покрытии кода для моих тестовых проектов .net core.


OpenCover+ReportGenerator. Установите как пакеты NUGET в один из ваших тестовых проектов (один раз, потому что они просто должны появиться в папке пакета).

тогда вы можете поставить этот powershel https://github.com/rpokrovskij/opencover4vs.ps1 в папку решения и настройте ее с помощью тестовых проектов, используя глобирование пути, например

$TestProjectsGlobbing = @(,'*.Тест.csproj')

тогда вы можете запустить его как обычный Powershel скрипт. Результат должен появиться в папке решения в \TestsResults\report\index.HTML-код