C# 代码覆盖率中未考虑委派开关

C# 代码覆盖率中未考虑委派开关,c#,visual-studio,resharper,code-coverage,switch-expression,C#,Visual Studio,Resharper,Code Coverage,Switch Expression,在使用开关箱时,我发现了以下问题。R#向我展示了switch语句的简化,它在分配变量时基本上将委托绑定到case标签 var shape = shapeType switch { ShapeType.Ellipse => new Ellipse(), ShapeType.Polygon => new Polygon(), _ => new Rectangle() }; 这样做的好处是对于大型开关案例的可读性,因为分配开关基本上可以节省三分之二的行 我的

在使用开关箱时,我发现了以下问题。R#向我展示了switch语句的简化,它在分配变量时基本上将委托绑定到case标签

var shape = shapeType switch
{
    ShapeType.Ellipse => new Ellipse(),
    ShapeType.Polygon => new Polygon(),
    _ => new Rectangle()
};
这样做的好处是对于大型开关案例的可读性,因为分配开关基本上可以节省三分之二的行

我的问题是:我非常喜欢这种类型的开关,因为它提高了可读性,但VisualStudio的代码覆盖工具(VS Enterprise 2019-16.4.4)没有考虑到这一点。由于我们的政策致力于90%的代码覆盖率,因此每一个百分比都是有价值的

是否有可能将这些开关包括在代码覆盖范围内?

Kate在这里有一个观点。 我的项目有一个硬100%的代码覆盖率阈值,开关表达式永远不会被完全覆盖,即使等效的开关语句是

以下是一个例子:

以下switch语句在我的项目中提供了100%的代码覆盖率:

switch (values[3])
{
    case "F": return new string(Convert.ToString(value, 2).Reverse().ToArray()).PadRight(max, '0');
    case "G": return $"{value} of {max}";
    case "R" when value == 0: return $"none of {max}";
    case "R" when value == 1: return $"1st of {max}";
    case "R" when value == 2: return $"2nd of {max}";
    case "R" when value == 3: return $"3rd of {max}";
    default: return $"{value}th of {max}";
}
等效开关表达式仅给出99.91%,基于Jenkins的构建失败:

return values[3] switch
{
    "F" => new string(Convert.ToString(value, 2).Reverse().ToArray()).PadRight(max, '0'),
    "G" => $"{value} of {max}",
    "R" when value == 0 => $"none of {max}",
    "R" when value == 1 => $"1st of {max}",
    "R" when value == 2 => $"2nd of {max}",
    "R" when value == 3 => $"3rd of {max}",
    _ => $"{value}th of {max}"
};
代码覆盖率着色并不表示哪个分支没有被覆盖,因为它标记了整个语句

我认为这是编译器如何生成表达式的最终IL的问题。
应将其作为C#bug解决,并提交给Microsoft进行修复。

使用属性
[ExcludeFromCodeOverage]
?在这种情况下,我们不允许使用[ExcludeFromCodeOverage]。否则,人们会发送垃圾邮件,这会降低代码覆盖率的价值。我们可以修改“CodeCoverage.runsettings”,但只能排除整个函数、类或名称空间。它实际上被称为a。如果您对此有很好的修改,您应该针对该工具提交错误/问题。这可能是语言特性和编译器团队领先于代码覆盖团队的结果。请务必描述它对您的开发流程的影响,这回答了我的问题-具有相同的问题,带有新的C#8.0交换机功能,并且它稍微降低了代码覆盖率