【问题标题】:Sonarqube only showing some test coverage for Java testsSonarqube 仅显示 Java 测试的一些测试覆盖率
【发布时间】:2020-11-14 19:08:14
【问题描述】:

我的 java 应用现在有 45% 的代码覆盖率。我一直在添加新的测试,它们已经被我的应用程序(通过 mvn 测试和 Intellij 显示覆盖率)和 Sonarqube 扫描。

这是我的测试文件:

public class BadRequestAlertExceptionTest {

    BadRequestAlertException baExc = new BadRequestAlertException("testDefaultMessage","testEntityName");
    @Test
    public void getEntityName() {
        assertEquals("testEntityName", baExc.getEntityName());
    }
}

我正在尝试将代码覆盖率添加到以下文件:

public class BadRequestAlertException extends AbstractThrowableProblem {
    private static final long serialVersionUID = 1L;
    private final String entityName;
    public BadRequestAlertException(String defaultMessage, String entityName) {
        this(ErrorConstants.DEFAULT_TYPE, defaultMessage, entityName);
    }
    public BadRequestAlertException(URI type, String defaultMessage, String entityName) {
        super(type, defaultMessage, Status.BAD_REQUEST, null, null, null, getAlertParameters(entityName));
        this.entityName = entityName;
    }
    public String getEntityName() {
        return entityName;
    }
    private static Map<String, Object> getAlertParameters(String entityName) {
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("message", "error.");
        parameters.put("params", entityName);
        return parameters;
    }
}

在本地我可以看到该文件的代码覆盖率为 100%,但在 Sonarqube 上显示为 0%。有谁知道为什么?我知道 Sonarqube 设置正确,因为它一直在增加我的其他文件的覆盖率%。

我使用的测试工具是 JUnit。

我的测试可能不正确,所以 Sonarqube 不接受它为 100%,而我的“mvn 测试”和我的 IDE 接受它为 100%?

我查看了SonarQube not picking up Unit Test Coverage,但这个问题更多的是关于 Sonarqube 是否显示 0% 的覆盖率(我的显示了一些覆盖率)

【问题讨论】:

  • “我的测试可能不正确吗” 你可以理解,如果覆盖范围略有不同(不同的工具将不同的事物计算为已“覆盖”)。但不是当差异为 100% 时
  • 等等。你自相矛盾,不是吗? “我的显示出一些覆盖率”“Sonarqube 显示为 0%”
  • @Michael Sonarqube 显示整个应用程序的代码覆盖率为 45%。在这个特定文件上,它显示为 0%。当我的 intellij 将其显示为 100% 覆盖率时,我不知道为什么它显示为 0%。
  • 你遗漏了什么吗?因为你展示的测试没有覆盖 100% 的课程,所以 IntelliJ 会给出这个结果很奇怪。例如,没有涵盖 3 参数构造函数。我想知道您是否在 IntellIJ 中运行了一些额外的测试工具(例如集成测试),这实际上为您提供了覆盖范围,而 Sonar 中没有运行相同的工具。
  • 您使用的是什么测试工具(将详细信息编辑到问题中)?测试NG? JUnit? JUnit 要求任何 @Test 方法都是公开的(不确定类,可能也需要公开)。所以这可能是测试没有运行的原因之一

标签: java spring unit-testing sonarqube


【解决方案1】:

根据我最近的经验,您可能没有导入正确的测试包。本应使 Java 开发更容易的两件事对您不利。

  • 首先,当您使用“@Test”注释类时,IDE 通常会自动建议导入。但是,“Test”是一个通用命名空间/类名,因此自动建议可能是针对本地类,而不是 org.junit.test。
  • 其次,Java 编辑器可以完全折叠导入部分,从而更难发现该问题。

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 2019-11-30
    • 2021-07-09
    • 2022-07-01
    • 2014-10-25
    • 2018-10-18
    • 2016-09-13
    • 2015-03-13
    相关资源
    最近更新 更多