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

标签 java sonarqube code-coverage jacoco

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

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

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

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

我的问题:

  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

enter image description here

最佳答案

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 个案例。由于要切换枚举,因此还必须向枚举添加另一个常量。如:DEFAULTUNKNOWN

关于java - 在 SonarQube 中使用枚举错误计算开关条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58636501/

相关文章:

java - Java 中的递归是如何工作的?

java - 如何向 < 添加对象?扩展接口(interface)>?

java - Tomcat 8 中的虚拟主机

hudson - 为什么 jenkins 中的 Sonar 插件会重新构建所有内容?

java - 如何运行 Sonar 来分别分析每个子模块

php - 从 PHPUnit 的几次执行中聚合代码覆盖率

android - 是否可以使用 SonarQube 分析 Android Kotlin 代码覆盖率?

java - 使用 Google Sheets Api 时出错

java - 如何使用元数据获取h2数据库的表结构

java - coverage.ec 文件格式