Jak*_*lås 20 c# architecture unit-testing code-coverage dotcover
我有一堆接近100%测试覆盖率的程序集,但我经常遇到如下例所示的情况.我无法测试默认的开关案例,这是为了防范未来的错误,我在枚举中添加了更多的项目,但忘记更新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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
私有方法总是被提取到自己的类中的候选者.特别是,如果他们持有复杂的逻辑,就像你的那样.我建议你StuffDoer用DoStuff()一个公共方法创建一个类,然后将它注入你的Tester类.然后你有:
DoStuff()可通过测试获得的方法DoSomeRandomStuff()可与模拟的而不是依靠的结果进行测试方法DoStuff(),从而使之成为真正的单元测试.| 归档时间: |
|
| 查看次数: |
4444 次 |
| 最近记录: |