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 编辑者可以完全折叠导入部分,从而更难发现该问题。
我的 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 编辑者可以完全折叠导入部分,从而更难发现该问题。