Tho*_*que 7 c# unit-testing code-coverage dotcover
我怀疑答案是否定的,但无论如何我都会问...
TL; DR
我知道我可以使用[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);
}
}
Run Code Online (Sandbox Code Playgroud)
在实践中,它永远不会被完全枚举,因此永远不会达到方法的结束.因此,DotCover认为该方法的20%未被覆盖,并且它将右大括号突出显示为未覆盖(对应return false于生成的MoveNext方法).
我可以编写一个消耗整个序列的测试,但是运行需要很长时间,特别是启用了覆盖范围.
所以我想找一种告诉DotCover的方法,不需要覆盖最后一条指令.
注意:我知道我并不需要单元测试所涵盖的所有代码; 某些代码片段不能或不需要进行测试,我通常会排除那些具有该[ExcludeFromCodeCoverage]属性的代码.但我喜欢100%报告我测试的代码的覆盖率,因为它可以更容易地发现未经测试的代码部分.当你知道没有更多东西需要测试时,有80%覆盖率的方法是非常烦人的...
不,没有办法从使用 dotCover 的覆盖率分析中排除“方法的一部分”。
一般来说,你有几个选择:
在这种情况下,可能会有第三种选择。由于您的测试代码使用了您的大部分方法,也许您应该只编写一个测试方法来确保代码运行完成?