我正在使用Sonarqube跟踪多模块Maven项目的单元和联调覆盖率。
这是在我进行更改之前,用于在本地生成Sonarqube报告的父pom.xml中的现有配置文件:
在Sonarqube本地生成所有单元测试覆盖范围的配置文件
<profiles>
<profile>
<id>coverage</id>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<sonar.jacoco.reportPaths>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPaths>
<sonar.projectName>plan-advantage-serverless-${project.artifactId}</sonar.projectName>
<sonar.projectKey>${project.groupId}-MPA-${project.artifactId}</sonar.projectKey>
<sonar.exclusions>file:**/generated-sources/**,**/*Model.java,**/models/**/*</sonar.exclusions>
<sonar.test.exclusions>**/test/*</sonar.test.exclusions>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.language>java</sonar.language>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<configuration>
<append>true</append>
<excludes>
<exclude>**/test/*</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-Xlint:all</arg>
<arg>-Xlint:-processing</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
<systemPropertyVariables>
<jacoco-agent.destfile>${sonar.jacoco.reportPaths}</jacoco-agent.destfile>
</systemPropertyVariables>
</configuration>
<dependencies>
<!-- needed for powermock to run correctly with surefire-->
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.22.0</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.5.0.1254</version>
</plugin>
</plugins>
</build>
</profile>
当我运行mvn clean install-P coverage sonar:sonar时,这将在Sonarqube本地生成预期的测试覆盖率(无集成测试)。
到目前为止,我已经能够通过对父pom.xml添加以下内容,将集成覆盖率作为概念验证添加进来:
pom.xml,包括声纳库的集成测试覆盖范围,但不包括一些单元测试
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<jacoco.version>0.7.9</jacoco.version> . <sonar.jacoco.reportPaths>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPaths>
<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
<sonar.language>java</sonar.language>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M3</version>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>3.0.0-M3</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>agent-for-ut</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<append>true</append>
<destFile>${sonar.jacoco.reportPaths}</destFile>
</configuration>
</execution>
<execution>
<id>agent-for-it</id>
<phase>package</phase>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<append>true</append>
<destFile>${sonar.jacoco.itReportPath}</destFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
这是受到这里的例子的启发。
但是,当我使用命令
mvn净安装故障安全:集成测试声纳:声纳
运行它时,它会导致之前涵盖的一些单元测试没有显示在Sonarqube输出中。我相信准备代理和准备代理集成目标正在使用即时检测。根据JaCoCo的文档,在使用PowerMock(我的项目正在使用)时不可能进行即时检测,因此我们必须为JaCoCo使用离线检测。
我查看了这个使用离线工具的示例,并在命令< code > mvn clean install test sonar:sonar
中使用了以下pom.xml:
父pom。由于NoClassDefFound错误而无法生成的xml
<build>
...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
</execution>
</executions>
</plugin>
</build>
对于适当的pom.xml配置有什么想法,以使离线仪器能够在Sonarqube中获得集成和单元测试覆盖率?
我知道这个问题已经有10个月的历史了,但是对于遇到这个问题的其他人,你需要把它添加到你的pom.xml文件中的依赖项中。
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<classifier>runtime</classifier>
<version>${jacoco.version}</version>
<scope>test</scope>
</dependency>
在我认为是彻底的谷歌搜索后,我只能找到一种方法来做这件事与声纳。有没有更简单的方法可以做到这一点? 相关问题:Maven分离单元测试和集成测试
我正试图在詹金斯的sonarqube仪表板上获取代码覆盖率报告。代码覆盖率报告即将发布,但仅显示4.6%的覆盖率。经过调查,我发现使用PowerMock编写的测试类被跳过了。 经过进一步调查,我发现“JaCoCo不能很好地处理动态修改/创建的类(这就是powermock的工作方式)。这是一个已知的限制,我们目前对此无能为力”。 是否有任何解决办法,以便我也可以为使用PowerMock编写的测试类获
我正在尝试对<code>java进行单元测试。lang类。 背景:到目前为止有效的方法 这不是真正的标准,但是将 } 中 (在 Ubuntu 上)中提供的源代码和 rt.jar 中提供的类复制到 中非常简单,然后 JaCoCo maven 插件可以看到它们并为某些类生成合适的输出。 例如,我得到了一些关于来源的报道。 但是我无法覆盖< code>java.lang中的类。调用< code>Byte
单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet
我正在为一个Android库设置单元测试代码覆盖率,该库使用Robolectric运行测试,并使用PowerMock/Mockito进行模拟测试。 但是,使用Cobertura运行单元测试会导致以下异常... *即使用PowerMock注释测试,删除注释、和调用。 我看到一些用户通过在他们的测试套件中设置来修复类似的问题。 但是,这不是解决方案,因为我使用的是Gradle,它在Java项目上默认为
我目前有一个maven Web项目,我正在尝试为其编写集成测试。对于项目的结构,我在src/test/java下定义了测试存根,而这些存根的Spring bean定义位于src/test/资源下。 我想做的是,当我构建我的war工件时,我希望所有的测试存根类都被编译并与Springbean定义文件一起包含在war中。我曾尝试使用maven war插件来实现这一点,但我唯一能够复制的就是资源。简单地