我有一个项目,该项目使用货物插件启动tomcat,然后对该tomcat实例进行集成测试。我的目标是获取在tomcat中运行的代码的集成测试覆盖范围报告(不是我的集成测试的覆盖范围(。
问题是,如何获得Tomcat(单独的JVM(运行代码的代码覆盖结果?
我已经能够在测试模块中获得集成测试本身和Java类的覆盖范围报告,但是这些都毫无价值。
在jacoco-sessions.html文件中,我只能在测试模块的类Pather中看到可用的类。在Tomcat服务器中运行的类不存在。
除了Godin的答案之外,您还必须确保测试类的覆盖范围数据本身不使用与运行代码的覆盖范围数据相同货物容器。我认为,在我的情况下,测试的覆盖范围是覆盖测试的覆盖范围。
请注意,我正在使用jacoco.exec
进行代码范围内综合测试的覆盖范围数据。通常,这用于单元测试,但是我的模块中没有单位测试。这样,我就不需要为额外的文件名配置Sonarqube,但是如果您愿意,可以在此处使用另一个文件名。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-agent-integration-cargo</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco.exec</destFile>
<propertyName>argLineCargo</propertyName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<configuration>
<container>
<!-- ... -->
</container>
<configuration>
<properties>
<cargo.start.jvmargs>${argLineCargo}</cargo.start.jvmargs>
<!-- ... -->
</properties>
</configuration>
<!-- ... -->
</configuration>
<!-- ... -->
</plugin>
和父型pom中的jacoco配置:
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<includes>
<include>my/project/package/**/*</include>
</includes>
</configuration>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>prepare-agent-integration</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
<execution>
<id>reports</id>
<goals>
<goal>report</goal>
<goal>report-integration</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>@{argLine}</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>@{argLine}</argLine>
</configuration>
</plugin>
</plugins>
</build>
根据jacoco-maven-plugin
的文档http://www.jacoco.org/jacoco/jacoco/trunk/doc/prepare-agent-agent-mojo.html:
准备一个指向jacoco Runtime代理的属性,该属性可以作为VM参数传递给测试中的应用程序。默认情况下,根据项目包装类型,设置了带有以下名称的属性:
tycho.testArgLine
用于包装类型Eclipse-Test-Plugin和argLine
否则。
argLine
属性会影响使用测试启动JVM的maven-surefire-plugin
和maven-failsafe-plugin
- 请参阅http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#argline and http://maven.apache。分别分别org/surefire/maven-failsafe-plugin/Integration-test-mojo.html#armline,但是此属性对使用tomcat启动JVM的cargo-maven2-plugin
没有影响。
根据https://stackoverflow.com/a/38435778/244993和https://codehaus-cargo.github.github.io/cargo/cargo/tomcat 9.x.x.html,您需要将jacoco-maven-plugin
设置为cargo-maven2-plugin
如cargo.jvmargs
。