SonarQube中的枚举计数错误的开关条件

问题描述 投票:2回答:1

我有一个带有3个值(A, B, C)的枚举。

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

我还有一个测试用例,其参数值不同,以确保覆盖所有条件。

但是,SonarQube上的结果显示“部分被测试覆盖(4个条件中的3个)。”

我的问题:

  1. 为什么有四个条件?我认为应该是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);
}

[UPDATE]

尝试添加默认大小写,结果是相同的。

似乎第四个条件是default情况。

  1. 我应该怎么处理default案?
  2. 由于我没有在switch语句中添加default,所以SonarQube为什么计入default

enter image description here

java sonarqube code-coverage jacoco
1个回答
0
投票

为什么有四个条件?我认为应该是3个条件。(A,B,C)

否,有4个分支:A,B,C,以及另一个不是A,B,C的值。是的,我不在乎您的枚举只有3个常量,我在乎无论您是否定义default,您的switch语句都有4个有效分支。

我该怎么做才能完全覆盖4个条件?

忽略警告,它应该是多余的。如果要完全覆盖,则必须在测试中再增加1个案例。由于要切换一个枚举,因此也必须向枚举添加另一个常量。像:DEFAULTUNKNOWN

© www.soinside.com 2019 - 2024. All rights reserved.