Sonarqube 仅显示 Java 测试的一些测试覆盖率

Sonarqube only showing some test coverage for Java tests

我的 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 test' 和我的 IDE 接受它为 100%?

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

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

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