java 随着我编写的测试越来越多,SonarQube并没有增加测试覆盖率

xzlaal3s  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(211)

我一直面临着一个非常奇怪的问题与项目和使用SonarQube。
正如你在下面的图片中所看到的,我的测试覆盖率是我全部代码的9.5%,相对于我已经写的代码数量和将来写的代码数量来说,这是相当低的。

当我第一次尝试编写测试时,它们没有被检测到,因为我在pom.xml中忘记了一个插件,我添加了这个插件,如下所示

<plugin>
 <groupId>org.jacoco</groupId>
 <artifactId>jacoco-maven-plugin</artifactId>
 <version>0.8.8</version>
 <executions>
    <execution>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
    </execution>
    <execution>
      <id>generate-code-coverage-report</id>
      <phase>test</phase>
      <goals>
        <goal>report</goal>
      </goals>
    </execution>
  </executions>
</plugin>

在那之后,我得到了声纳库的这个窗口。

很好!我的测试被检测到了,我去了13.2%的新代码和9.5%的整体!但这是真正的问题开始,因为我写了更多的测试,并推动他们到SonarQube,没有更多的显示。百分比没有增加,还有我认为测试没有覆盖的那一行。最奇怪的是测试代码在SonarQube上!它被推到声纳,但没有检测到作为测试代码或任何它应该是!
所以,我试着看尽可能多的视频,但似乎没有什么真正的工作,我只是有一种感觉,我失去了时间。我一直试图在我最简单的类上编写简单的测试类,例如:下面是我的课堂:www.example.comCategorie.java

package com.back.projetbdi_groupe1.Entities;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class Categorie {
    @Id
    private String idCategorie;

    private String libCateg;

    public String getIdCategorie() {
        return idCategorie;
    }

    public void setIdCategorie(String idCategorie) {
        this.idCategorie = idCategorie;
    }

    public String getLibCateg() {
        return libCateg;
    }

    public void setLibCateg(String libCateg) {
        this.libCateg = libCateg;
    }
}

我的测试班:www.example.comCategorieTest.java

package com.back.projetbdi_groupe1.entities;

import com.back.projetbdi_groupe1.Entities.Categorie;
import org.junit.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CategorieTest {

    @Test
    public void testGetIdCategorie(){
        Categorie categorie = new Categorie();
        categorie.setIdCategorie("1");
        assertEquals("1",categorie.getIdCategorie());
    }

    @Test
    public void testGetLibCateg(){
        Categorie categorie = new Categorie();
        categorie.setLibCateg("categ");
        assertEquals("categ",categorie.getLibCateg());
    }
}

你可以在声纳中看到:

但是:

您可以看到没有涵盖任何内容。所以,我想知道我是否没有以正确的方式进行测试,或者是SonarQube的bug?或者是我的pom.xml不完整?我将把我发现有用的pom.xml放在下面。哦,为了将代码"推送"到SonarQube,我使用以下命令:mvn清洁验证声纳:声纳-D声纳。登录名=我的神奇和长令牌
pom.xml的其余部分:
一个三个三个一个

0s0u357o

0s0u357o1#

我没有一个明确的答案,只是有些事情要查一下。
在运行“sonar:sonar”的同一个mvn命令行中使用“clean”目标有点奇怪,但这是可能的。检查这个命令的输出,并验证它是否运行了所有的单元测试。
当Jacoco和Surefire正确集成时,它应该生成一个html页面,您可以访问该页面来检查Jacoco结果。它可能位于“target/jacoco_report”中。如果存在(也可能位于不同的子目录中),则在浏览器中查看该页面,并查看该报告中是否缺少测试。SonarQube只集成生成的jacoco数据。
在SonarQube结果中,您还可以看到执行的单元测试列表,查看“CategorieTest”是否在该列表中。

brvekthn

brvekthn2#

所以,为了解决我自己的问题,我什么也没做,只是测试我的代码“更少的错误”,如果我可以说。
这就是前面的测试示例现在的样子!

package com.back.projetbdi_groupe1.Entities;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeAll;

import static org.junit.jupiter.api.Assertions.assertEquals;

class CategorieTest {
    /**
     * Methods under test:
     *
     * <ul>
     *   <li>default or parameterless constructor of {@link Categorie}
     *   <li>{@link Categorie#setIdCategorie(String)}
     *   <li>{@link Categorie#setLibCateg(String)}
     *   <li>{@link Categorie#getIdCategorie()}
     *   <li>{@link Categorie#getLibCateg()}
     * </ul>
     */
    static Categorie actualCategorie;

    @BeforeAll
    public static void init() {
        actualCategorie = new Categorie();
        actualCategorie.setIdCategorie("1");
        actualCategorie.setLibCateg("Lib Categ");
    }

    @Test
    void testGetIdCategorie() {
        assertEquals("1", actualCategorie.getIdCategorie());
    }

    @Test
    void testGetLibCateg() {
        assertEquals("Lib Categ", actualCategorie.getLibCateg());
    }
}

在声纳中:

一切都是绿色的,我很高兴。

相关问题