在 SonarQube 中使用枚举错误计算开关条件
Miscounting switch conditions with enum in SonarQube
我有一个包含 3 个值的枚举 (A, B, C)
。
foo
方法中使用了 switch 表达式来根据枚举值做一些事情。
我还有一个测试用例,它具有不同的值作为参数以确保涵盖所有条件。
但是,SonarQube 上的结果显示 "partially covered by tests (3 of 4 conditions)."
我的问题:
- 为什么有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 个常量,我关心的是你的 switch 语句有 4 个有效分支,无论你是否定义 default
。
What should I do to fully cover 4 conditions?
忽略警告,它应该是多余的。如果要完全覆盖,则必须在测试中再添加 1 个案例。由于要切换枚举,因此还必须向枚举添加另一个常量。喜欢:DEFAULT
、UNKNOWN
等
我有一个包含 3 个值的枚举 (A, B, C)
。
foo
方法中使用了 switch 表达式来根据枚举值做一些事情。
我还有一个测试用例,它具有不同的值作为参数以确保涵盖所有条件。
但是,SonarQube 上的结果显示 "partially covered by tests (3 of 4 conditions)."
我的问题:
- 为什么有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 个常量,我关心的是你的 switch 语句有 4 个有效分支,无论你是否定义 default
。
What should I do to fully cover 4 conditions?
忽略警告,它应该是多余的。如果要完全覆盖,则必须在测试中再添加 1 个案例。由于要切换枚举,因此还必须向枚举添加另一个常量。喜欢:DEFAULT
、UNKNOWN
等