我有一个包含 3 个值的枚举 (A, B, C)
。
在 foo
方法中使用 switch 表达式根据枚举值做一些事情。
我还有一个具有不同值的测试用例作为参数,以确保涵盖所有条件。
但是,SonarQube 上的结果显示“部分被测试覆盖(4 个条件中的 3 个)”
我的问题:
- 为什么有 4 个条件?我觉得应该是3个条件。
(A, B, C)
- 我应该怎么做才能完全涵盖 4 个条件?
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);
}
[更新]
尝试添加默认大小写,结果是一样的。
第四个条件似乎是default
情况。
- 我应该怎么做才能涵盖
default
案例? - 为什么 SonarQube 在
default
中计数,因为我没有在 switch 语句中添加default
?
最佳答案
Why are there 4 conditions? I think it should be 3 conditions.(A, B, C)
不,有 4 个分支:A、B、C 和另一个不是 A、B、C 的值。是的,我不在乎你的枚举只有 3 个常量,我关心的是无论您是否定义 default
,您的 switch 语句都有 4 个有效分支。
What should I do to fully cover 4 conditions?
忽略警告,它应该是多余的。如果要完全覆盖,则必须在测试中再添加 1 个案例。由于要切换枚举,因此还必须向枚举添加另一个常量。如:DEFAULT
、UNKNOWN
等
关于java - 在 SonarQube 中使用枚举错误计算开关条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58636501/