【问题标题】:.net core projects code coverage visual studio 2017.net 核心项目代码覆盖 Visual Studio 2017
【发布时间】:2017-08-18 01:47:55
【问题描述】:

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

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

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

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

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

Update1:​​我发现了这个话题:https://github.com/Microsoft/vstest/issues/597

【问题讨论】:

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


    【解决方案1】:

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

    目前尚未为 netcore 项目实施代码覆盖。这 这个问题的工作正在进行中,它将作为 RTW 后的一部分出现 发布。

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      它适用于 .NET Core 并且可以显示代码覆盖率。

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

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 谢谢。我还没有看它,但看起来它正在路上。
        【解决方案5】:

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

        所以,总结一下:

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

        2. 在.csproj文件上添加<DebugType>Full</DebugType>标签on 我们希望查看代码覆盖率值的项目(在<PropertyGroup> 内,如vstest github link 中所述)。

        3. 运行单元测试。
        4. 在“测试资源管理器”中选择通过的单元测试,右键单击->“分析所选测试的代码覆盖率”。
        5. 您应该会看到程序集的代码覆盖率。

        我的设置(最小设置?)

        • xunit (2.3.1)
        • xunit.runner.visualstudio (2.3.1)
        • Microsoft.NET.Test.Sdk (15.3.0)
        • Microsoft.CodeCoverage (1.0.3)
        • Visual Studio 企业版 2017 (15.4.1)

        【讨论】:

        • 我有 VS2017 Pro (15.5.2),与上面列出的包相同,但是在运行单元测试后,没有名为“分析代码覆盖率”的右键单击上下文菜单。
        • 哦,我查看了您提到的 github 链接,发现它现在需要 Visual Studio ENTERPRISE。非常感谢 Micro$oft。
        • 我一直在等待 .NET Core 中的代码覆盖率......这很棒!谢谢!
        • 这对我有用。以下是 NUnit 的附加步骤:
        • 抱歉,编辑上述评论的时间已过。 NUnit 的其他步骤: - 将单元和测试适配器更新到 3.9 - 需要添加对 Mono.Cecil 0.10.0-beta7 的引用 .NET Standard 支持需要测试版。一旦 0.10.0 退出测试版,NUnit 人员会将其包含在常规 NuGet 包中。见github.com/nunit/nunit3-vs-adapter/issues/325。一旦关闭,就不需要额外的参考。
        【解决方案6】:

        JDC 的回答帮助我将我的实际项目包括在内,但我无法摆脱覆盖率报告中的测试项目。 我通过在我的 XUnit 测试项目中添加一个“CodeCoverage.runsettings”来管理它,内容如下:

        <?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 部分中排除测试项目。

        【讨论】:

        • 我知道这个回复已经很晚了...您是否检查过您的测试项目的 csproj 文件中是否有 &lt;DebugType&gt;Full&lt;/DebugType&gt;(在 &lt;PropertyGroup&gt; 内)?如果是这种情况,请将其删除,您应该摆脱它们
        猜你喜欢
        • 2018-05-19
        • 2018-11-11
        • 1970-01-01
        • 2018-06-22
        • 2019-01-15
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多