首页 > 解决方案 > openCover 报告意外的低覆盖率

问题描述

我有以下代码:

var isDuplicateCategoryIds = _query.Categories
    .GroupBy(x => x.Id)
    .Any(g => g.Count() > 1);

我有两个调用此代码的测试,一个有重复的 Id,一个没有。

然而,openCover(在我们的 CI 服务器上使用)报告:

部分被测试覆盖(44 个条件中的 16 个)。

在本地,dotCover 报告 100%。

据我了解,openCover 使用 IL 中生成的分支和条件,该语句的 IL 为以下 24 行(已删除命名符号):

IL_0001: ldarg.0      // this
IL_0002: ldfld        
IL_0007: callvirt     
IL_000c: ldsfld       
IL_0011: dup
IL_0012: brtrue.s     IL_002b
IL_0014: pop
IL_0015: ldsfld       
IL_001a: ldftn        
IL_0020: newobj       
IL_0025: dup
IL_0026: stsfld       
IL_002b: call         
IL_0030: ldsfld       
IL_0035: dup
IL_0036: brtrue.s     IL_004f
IL_0038: pop
IL_0039: ldsfld       
IL_003e: ldftn        
IL_0044: newobj       
IL_0049: dup
IL_004a: stsfld       
IL_004f: call         
IL_0054: stloc.0      

我的问题是如何在这里获得报道?

顺便说一句:尝试这样做是否值得?我进行了涵盖此代码所涉及的两种情况的测试;骗子,没有骗子。在此之前执行的代码会检查是否Categories为空/空,并且在这种情况下不会调用此代码。因此,如果在幕后产生的其中一些条件是为此(我不知道它们是),这是一个有争议的问题。

标签: .net-corecode-coveragetest-coverageopencoverdotcover

解决方案


推荐阅读