我有一个带有3个值(A, B, C)
的枚举。
foo
方法中使用了一个开关表达式来根据枚举值做一些事情。
我还有一个测试用例,其参数值不同,以确保覆盖所有条件。
但是,SonarQube上的结果显示“部分被测试覆盖(4个条件中的3个)。”
我的问题:
(A, B, C)
public enum FooType
{
A, B, C
}
public class TestCondition
{
public int foo (FooType type)
{
int ans = 0;
switch (type) {
case A:
ans = 10;
break;
case B:
ans = 20;
break;
case C:
ans = 30;
break;
}
return ans;
}
}
@Test
public void testFoo ()
{
TestCondition testCondition = new TestCondition();
testCondition.foo(FooType.A);
testCondition.foo(FooType.B);
testCondition.foo(FooType.C);
}
[UPDATE]
尝试添加默认大小写,结果是相同的。
似乎第四个条件是default
情况。
default
案?default
,所以SonarQube为什么计入default
?为什么有四个条件?我认为应该是3个条件。(A,B,C)
否,有4个分支:A,B,C,以及另一个不是A,B,C的值。是的,我不在乎您的枚举只有3个常量,我在乎无论您是否定义default
,您的switch语句都有4个有效分支。
我该怎么做才能完全覆盖4个条件?
忽略警告,它应该是多余的。如果要完全覆盖,则必须在测试中再增加1个案例。由于要切换一个枚举,因此也必须向枚举添加另一个常量。像:DEFAULT
,UNKNOWN
等