我一直面临着一个非常奇怪的问题与项目和使用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的其余部分:
一个三个三个一个
2条答案
按热度按时间0s0u357o1#
我没有一个明确的答案,只是有些事情要查一下。
在运行“sonar:sonar”的同一个mvn命令行中使用“clean”目标有点奇怪,但这是可能的。检查这个命令的输出,并验证它是否运行了所有的单元测试。
当Jacoco和Surefire正确集成时,它应该生成一个html页面,您可以访问该页面来检查Jacoco结果。它可能位于“target/jacoco_report”中。如果存在(也可能位于不同的子目录中),则在浏览器中查看该页面,并查看该报告中是否缺少测试。SonarQube只集成生成的jacoco数据。
在SonarQube结果中,您还可以看到执行的单元测试列表,查看“CategorieTest”是否在该列表中。
brvekthn2#
所以,为了解决我自己的问题,我什么也没做,只是测试我的代码“更少的错误”,如果我可以说。
这就是前面的测试示例现在的样子!
在声纳中:
一切都是绿色的,我很高兴。