Покрытие кода проектов .net core visual studio 2017

Я использую Visual Studio Enterprise 2017 для разработки моих проектов .net core.

в моем решении также есть несколько проектов модульного тестирования, и я хочу просмотреть текущий охват кода.

когда я нажал тест - > анализ покрытия кода - > все тесты. Все мои модульные тесты выполнялись, но в результатах покрытия кода сообщалось только о покрытии кода для моих проектов модульных тестов, что для меня не имеет никакого смысла.

Вопрос 1: вы, ребята, испытываете ту же проблему со мной? Любое решение для этого? Мне также нужно настроить определение сборки в VSTS для отчета о покрытии кода.

enter image description here

Вопрос 2: также, когда я щелкнул Правой Кнопкой Мыши, чтобы отладить 1 моего модульного теста. Он выполняет все мои модульные тесты. Является ли это ошибка в VS2017?

Update1: я нашел эту тему:https://github.com/Microsoft/vstest/issues/597

6 ответов


даже с "фиксированной" версией у меня были проблемы (только возможность видеть покрытие кода для тестовых проектов, а не фактические проекты, которые я тестировал). Чтобы обойти проблему, я удалил <DebugType>Full</DebugType> из тестового проекта.

Итак, в качестве резюме:

  1. добавить пакет Microsoft.CodeCoverage (1.0.3) в ваш тестовый проект.

  2. добавить <DebugType>Full</DebugType> тег .файл csproj on проекты, которые мы хотим видеть покрытие кода значения (внутри <PropertyGroup> Как пояснили на vstest GitHub link).

  3. выполнить модульные тесты.
  4. в" Проводнике тестов "выберите пройденные модульные тесты, щелкните правой кнопкой мыши - > "анализ покрытия кода для выбранных тестов".
  5. вы должны увидеть покрытие кода для ваших сборок.

моя настройка (минимальная настройка?)

  • xunit (2.3.1)
  • в xUnit.бегун.visualstudio (2.3.1)
  • Microsoft.Сеть.Тест.Sdk (15.3.0)
  • Microsoft.CodeCoverage (1.0.3)
  • Visual Studio Enterprise 2017 (15.4.1)

вы можете попробовать dotCover от Jetbrains. https://www.jetbrains.com/dotcover/features/

dotCover-это средство модульного тестирования и покрытия кода .NET, которое работает прямо в Visual Studio, помогает узнать, в какой степени ваш код покрыт модульными тестами, предоставляет отличные способы визуализации покрытия кода и является непрерывной интеграцией. dotCover вычисляет и сообщает покрытие кода уровня инструкции в приложениях, ориентированных на .NET Framework, Silverlight, и .NET Core.

Он отлично работает с .NET Core и может отображать покрытие кода.

поддерживает несколько фреймворков модульного тестирования, а именно MSTest, NUnit, xUnit (все из коробки) и MSpec (через плагин).

enter image description here


на основе этой статьи (покрытие кода не работает в среде IDE с netcoreapp1.x проекты (VS 2017 RTM):

покрытие кода в настоящее время не реализовано для проектов netcore. Этот работа над этим вопросом продолжается, она придет в рамках post RTW выпуск.


похоже, что они все еще разрабатывают биты инфраструктуры (сборщиков данных) перед выпуском. Они предположительно близки.

https://github.com/Microsoft/vstest/issues/579


эта проблема была исправлена в версии 15.3:

https://github.com/Microsoft/vstest-docs/blob/master/docs/analyze.md#coverage


ответ JDC помог мне включить мои фактические проекты, но я не мог избавиться от тестовых проектов в отчете о покрытии. Мне удалось это, добавив " CodeCoverage.runsettings " в моем тестовом проекте XUnit со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<!-- File name extension must be .runsettings -->
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <ModulePath>.*\.Tests.dll$</ModulePath>
                <!-- Add more ModulePath nodes here. -->
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

важной частью здесь является исключение тестового проекта в разделе ModulePaths.