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
相关产品推荐
相关产品推荐

