You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio代码覆盖率报告未统计全部已测试代码

Visual Studio 17.14.18代码覆盖率统计异常问题

我在使用Visual Studio 17.14.18版本生成代码覆盖率报告时遇到了异常情况:明明已经通过测试且被调用的大量方法,却没有被纳入报告或标记为已覆盖。更奇怪的是,这些未被统计的方法和正常统计的方法属于同一个类。

举个例子:XX.Universalis.Logging类中的Read方法能正常被统计,但两个返回元组的Write方法却没有被统计——尽管我的测试代码里已经明确调用了其中一个Write方法。

测试代码

public void LogEvent()
{
    XX.Data.EventLogs.Interactions.Events.Purge();

    DateTime EventDTG = DateTime.Now;
    Guid EventGUID = Guid.NewGuid();
    Guid TransactionGUID = Guid.NewGuid();
    string Program = "SYSTEM";
    int EventID = 999999;
    String Subject = "Event Subject";
    String Description = "Event Description";
    String Notes = "Event Notes";

    var t = XX.Universalis.Logging.Write(EventDTG, EventGUID, TransactionGUID, Program, EventID, Subject, Description, Notes);

    Assert.IsTrue(t.Result == true);
    Assert.IsTrue(t.IDNumber > 0);

    XX.Data.EventLogs.Models.Events TheEvent = XX.Universalis.Logging.Read(t.IDNumber);

    // 暂时没找到测试日期正确性的方法
    // Assert.IsTrue(DateTime.TryParse(TheEvent.DTGCreated, out _));
    Assert.IsTrue(TheEvent.EventID == 999999);
    Assert.IsTrue(TheEvent.Program == "SYSTEM");
    Assert.IsTrue(TheEvent.Subject == "Event Subject");
    Assert.IsTrue(TheEvent.Description == "Event Description");
    Assert.IsTrue(TheEvent.Notes == "Event Notes");
    Assert.IsTrue(Guid.TryParse(TheEvent.TransactionGUID.ToString(), out _));
    Assert.IsTrue(Guid.TryParse(TheEvent.EventGUID.ToString(), out _));
}

Logging类代码

namespace XX.Universalis
{
    public static class Logging
    {
        public static (bool Result, int IDNumber) Write(DateTime DTGCreated, Guid EventGUID, Guid TransactionGUID, string Program, int EventID, string Title, string Description, string Notes)
        {
            var t = XX.Data.EventLogs.Interactions.Events.Write(DTGCreated, EventGUID, TransactionGUID, Program, EventID, Title, Description, Notes);
            return (t.Result, t.IDNumber);
        }

        public static (bool Result, int IDNumber) Write(DateTime DTGCreated, Guid EventGUID, Guid TransactionGUID, string Program, int EventID, string Subject, string Description, string Notes, Exception ex)
        {
            var t = XX.Data.EventLogs.Interactions.Events.Write(DTGCreated, EventGUID, TransactionGUID, Program, EventID, Subject, Description, Notes, ex);
            return (t.Result, t.IDNumber);
        }

        public static XX.Data.EventLogs.Models.Events Read(int IDNumber)
        {
            var context = new XX.Data.EventLogs.EFContext.EventLogsContext();
            return context.Events.Where(b => b.IDNumber == IDNumber).ToList().FirstOrDefault();
        }
    }
}

TestSettings配置

<?xml version="1.0" encoding="utf-8"?>
<!-- 文件扩展名必须是.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>
            <!-- 匹配函数的完全限定名称: -->
            <!-- (C#或Visual Basic中使用"\."分隔命名空间,C++中使用"::") -->
            
            <Functions>
              <Exclude>
                <!-- 测试相关 -->
                <Function>Microsoft\..*</Function>
                <Function>System\..*</Function>
                <Function>TestFx\..*</Function>
                <Function>System\..*</Function>
                
                <Function>XX.UnitTests\..*</Function>
                
                <!-- 数据模型和EF上下文 -->
                <Function>XX.Data.ClientManagement.EFContext\..*</Function>
                <Function>XX.Data.ClientManagement.Models\..*</Function>

                <Function>XX.Data.Connie.EFContext\..*</Function>
                <Function>XX.Data.Connie.Models\..*</Function>

                <Function>XX.Data.EventLogs.EFContext\..*</Function>
                <Function>XX.Data.EventLogs.Models\..*</Function>

                <Function>XX.Data.Medici.EFContext\..*</Function>
                <Function>XX.Data.Medici.Models\..*</Function>

                <Function>XX.Data.Sales.EFContext\..*</Function>
                <Function>XX.Data.Sales.Models\..*</Function>
              </Exclude>
            </Functions>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

内容的提问来源于stack exchange,提问作者TRH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:08:11