在 SonarQube 中使用枚举错误计算开关条件

Miscounting switch conditions with enum in SonarQube

我有一个包含 3 个值的枚举 (A, B, C)

foo 方法中使用了 switch 表达式来根据枚举值做一些事情。

我还有一个测试用例,它具有不同的值作为参数以确保涵盖所有条件。

但是,SonarQube 上的结果显示 "partially covered by tests (3 of 4 conditions)."

我的问题:

  1. 为什么有4个条件?我觉得应该是3个条件。(A, B, C)
  2. 我应该怎么做才能完全涵盖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的情况

  1. 我应该怎么做才能覆盖 default 案例?
  2. 为什么 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 个案例。由于要切换枚举,因此还必须向枚举添加另一个常量。喜欢:DEFAULTUNKNOWN