.net核心项目代码覆盖视觉工作室2017

时间:2017-03-25 00:11:55

标签: code-coverage visual-studio-2017 xunit vs-unit-testing-framework

我正在使用Visual Studio Enterprise 2017来开发我的.net核心项目。

我的解决方案还有一些单元测试项目,我想查看我当前的代码覆盖率。

当我点击Test - >分析代码覆盖率 - >所有测试。我的所有单元测试都在运行,但在代码覆盖率结果中,它只报告了我的单元测试项目的代码覆盖率,这对我没有任何意义。

问题1 :你们和我有同样的问题吗?对此有何解决方案?我还需要在VSTS中设置构建定义来报告代码覆盖率。

enter image description here

问题2 :当我右键单击调试我的单元测试时。它执行我的所有单元测试。这是VS2017中的错误吗?

Update1:​​我找到了这个主题:https://github.com/Microsoft/vstest/issues/597

6 个答案:

答案 0 :(得分:37)

即使使用“修复”版本,我也遇到了问题(只能查看测试项目的代码覆盖率,而不是我正在测试的实际项目)。为了解决这个问题,我从测试项目中删除了<DebugType>Full</DebugType>

所以,作为摘要:

  1. 将Microsoft.CodeCoverage(1.0.3)包添加到您的测试项目中。

  2. 在.csproj文件上添加<DebugType>Full</DebugType>标记 我们希望查看代码覆盖率值的项目(在vstest github link内解释<PropertyGroup>内部。)

  3. 运行单元测试。
  4. 在“测试资源管理器”中选择已通过的单元测试,右键单击 - &gt; “分析所选测试的代码覆盖率”。
  5. 您应该看到程序集的代码覆盖率。
  6. 我的设置(最小设置?)

    • 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)

答案 1 :(得分:8)

你可以试试Jetbrains的dotCover。 https://www.jetbrains.com/dotcover/features/

  dotCover是一个.NET单元测试和代码覆盖工具,可以在Visual Studio中正常工作,帮助您了解单元测试覆盖代码的程度,提供可视化代码覆盖率的绝佳方法,并且可以持续集成。 dotCover计算并报告面向.NET Framework,Silverlight和.NET Core的应用程序中的语句级代码覆盖率。

它适用于.NET Core&amp;可以显示代码覆盖率。

  

支持多个单元测试框架,即MSTest,NUnit,xUnit(开箱即用)和MSpec(通过插件)。

enter image description here

答案 2 :(得分:3)

基于这篇文章(Code Coverage does not work in the IDE with netcoreapp1.x projects (VS 2017 RTM):

  

目前尚未针对netcore项目实施代码覆盖率。该   关于这个问题的工作正在进行中,它将作为RTW后的一部分   版本。

答案 3 :(得分:1)

看起来他们在发布之前仍然在研究基础设施(数据收集器)位。据说它们很接近。

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

答案 4 :(得分:1)

答案 5 :(得分:0)

JDC的回答帮助我包括了我的实际项目,但我无法摆脱报道中的测试项目。 我通过添加&#34; CodeCoverage.runsettings&#34;来管理它。在我的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部分中排除测试项目。