Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SONARQUE只能显示Java测试的一些测试覆盖率_Java_Spring_Unit Testing_Sonarqube - Fatal编程技术网

SONARQUE只能显示Java测试的一些测试覆盖率

SONARQUE只能显示Java测试的一些测试覆盖率,java,spring,unit-testing,sonarqube,Java,Spring,Unit Testing,Sonarqube,我的java应用现在有45%的代码覆盖率。我一直在添加新的测试,它们被我的应用程序(通过mvn测试和Intellij显示覆盖率)和Sonarqube扫描 这是我的测试文件: public class BadRequestAlertExceptionTest { BadRequestAlertException baExc = new BadRequestAlertException("testDefaultMessage","testEntityName&

我的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;
    }
}
公共类BadRequestAlertException扩展了AbstractThrowableProblem{
私有静态最终长serialVersionUID=1L;
私有最终字符串entityName;
public BadRequestAlertException(字符串defaultMessage、字符串entityName){
这(ErrorConstants.DEFAULT_类型、defaultMessage、entityName);
}
public BadRequestAlertException(URI类型、字符串defaultMessage、字符串entityName){
super(type,defaultMessage,Status.BAD_请求,null,null,null,getAlertParameters(entityName));
this.entityName=entityName;
}
公共字符串getEntityName(){
返回entityName;
}
私有静态映射getAlertParameters(字符串entityName){
映射参数=新的HashMap();
参数put(“消息”、“错误”);
parameters.put(“params”,entityName);
返回参数;
}
}
在本地我可以看到该文件的代码覆盖率为100%,但在Sonarqube上显示为0%。有人知道为什么吗?我知道Sonarqube设置正确,因为它已经将我的其他文件的覆盖率提高了%

我使用的测试工具是JUnit

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

我看了一下,但这个问题更多的是关于Sonarqube是否显示了0%的覆盖率(我的显示了一些覆盖率)


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

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

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

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

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