我有一堆测试覆盖率接近 100% 的程序集,但我经常遇到如下示例中的情况。我无法测试默认的 switch 案例,这是为了防止将来出现我向枚举添加更多项目但忘记更新 switch 语句以支持新项目的错误。
我希望能够找到一种模式,我可以在其中消除“不可测试”的代码,对其进行测试或标记要被覆盖分析排除的那一行代码(但不是整个方法)。
这听起来可能很傻,但我不想假设默认情况永远不会发生,我不想将默认情况与已经存在的情况捆绑在一起。我希望在创建此类错误时引发异常。这迟早会发生。
我现在使用DotCover来计算覆盖率。
注意:这只是示例代码,但我认为它说明了一个相当常见的模式。
public class Tester
{
private enum StuffToDo
{
Swim = 0,
Bike,
Run
}
public void DoSomeRandomStuff()
{
var random = new Random();
DoStuff((StuffToDo)random.Next(3));
}
private void DoStuff(StuffToDo stuff)
{
switch (stuff)
{
case StuffToDo.Swim:
break;
case StuffToDo.Bike:
break;
case StuffToDo.Run:
break;
default:
// How do I test or exclude this line from coverage?
throw new ArgumentOutOfRangeException("stuff");
}
}
}