【发布时间】: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