我怀疑答案是否定的,但我还是会问...
TL;博士
我知道我可以使用属性从覆盖分析中排除一个类或方法[ExcludeFromCodeCoverage]
,但是有没有办法只排除方法的一部分?
具体例子
我有一个懒惰地生成一系列int.MaxValue
元素的方法:
private static IEnumerable<TElement> GenerateIterator<TElement>(Func<int, TElement> generator)
{
for (int i = 0; i < int.MaxValue; i++)
{
yield return generator(i);
}
}
在实践中,它永远不会完全枚举,因此永远不会到达方法的结尾。因此,DotCover 认为 20% 的方法没有被覆盖,并且它突出显示右大括号为未覆盖(对应return false
于生成的MoveNext
方法)。
我可以编写一个消耗整个序列的测试,但它需要很长时间才能运行,尤其是在启用覆盖的情况下。
所以我想找到一种方法告诉 DotCover 最后一条指令不需要被覆盖。
注意:我知道我真的不需要单元测试涵盖所有代码;有些代码不能或不需要测试,我通常会排除那些具有[ExcludeFromCodeCoverage]
属性的代码。但是我喜欢对我测试的代码有 100% 的报告覆盖率,因为这样可以更容易地发现代码中未测试的部分。当你知道没有什么要测试的时候,拥有一个覆盖率为 80% 的方法是很烦人的……