.net основные проекты код покрытия визуальная студия 2017
Я использую Visual Studio Enterprise 2017 для разработки моих основных проектов.net.
Мое решение также имеет некоторые проекты тестирования модулей, и я хочу просмотреть текущее покрытие кода.
Когда я нажал Test → Анализ покрытия кода → Все тесты. Все мои модульные тесты выполнялись, но в результатах покрытия кода он сообщал только о покрытии кода для моих проектов модульных тестов, что для меня не имеет никакого смысла.
Вопрос 1: Вы, ребята, испытываете такую же проблему со мной? Любое решение для этого? Мне также необходимо настроить определение сборки в VSTS для отчета о охвате кода.
Вопрос 2: Также, когда я щелкнул правой кнопкой мыши, чтобы отладить 1 моего модульного теста. Он выполняет ВСЕ мои модульные тесты. Это ошибка в VS2017?
Update1: Я нашел эту тему: https://github.com/Microsoft/vstest/issues/597
Ответы
Ответ 1
Даже с "фиксированной" версией у меня были проблемы (только можно увидеть покрытие кода для тестовых проектов, а не фактические проекты, которые я тестировал). Чтобы обойти проблему, я удалил <DebugType>Full</DebugType>
из тестового проекта.
Итак, как резюме:
-
Добавьте пакетный пакет Microsoft.CodeCoverage(1.0.3) в тестовый проект.
-
Добавьте <DebugType>Full</DebugType>
в файл.csproj в проектах, которые мы хотим увидеть значения покрытия кода (внутри <PropertyGroup>
как описано в ссылке gstub vstest).
- Запустите единичные тесты.
- В "Проводнике тестеров" выберите пройденные модульные тесты, щелкните правой кнопкой мыши → "Анализ покрытия кода для выбранных тестов".
- Вы должны увидеть покрытие кода для своих сборок.
Моя настройка (минимальная настройка?)
- xunit (2.3.1)
- xunit.runner.visualstudio(2.3.1)
- Microsoft.NET.Test.Sdk(15.3.0)
- Microsoft.CodeCoverage(1.0.3)
- Visual Studio Enterprise 2017 (15.4.1)
Ответ 2
Вы можете попробовать dotCover от Jetbrains. https://www.jetbrains.com/dotcover/features/
dotCover - это инструмент тестирования.NET и инструмент для покрытия кода, который работает прямо в Visual Studio, помогает вам знать, в какой степени ваш код покрывается модульными тестами, предоставляет отличные способы визуализации покрытия кода и готовность к непрерывной интеграции. dotCover вычисляет и сообщает о распространении кода на уровне инструкций в приложениях, ориентированных на.NET Framework, Silverlight и.NET Core.
Он отлично работает с.NET Core и может показывать покрытие кода.
Поддерживает несколько модулей тестирования модулей, а именно MSTest, NUnit, xUnit (все из коробки) и MSpec (через подключаемый модуль).
Ответ 3
На основе этой статьи (Code Coverage не работает в среде IDE с проектами netcoreapp1.x(RTM VS 2017):
В настоящее время покрытие кода не выполняется для проектов netcore. Работа над этим вопросом продолжается, и это станет частью релизов после RTW.
Ответ 4
Похоже, что они все еще разрабатывают биты инфраструктуры (сборщики данных) перед выпуском. Они якобы близки.
https://github.com/Microsoft/vstest/issues/579
Ответ 5
Эта проблема исправлена в версии 15.3:
https://github.com/Microsoft/vstest-docs/blob/master/docs/analyze.md#coverage
Ответ 6
Ответ 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.