Executing and Collecting Coverage for Unit Tests
You can include unit test results in the Jtest report by running your tests with the jtest:jtest and jtest:agent goals, and the dedicated Unit Tests built-in test configuration:
- Ensure that the Jtest Plugin for Maven is set up (see Configuring the Jtest Plugin for Maven).
Execute the jtest:agent and jtest:jtest goals with Maven. Ensure that the tests and classes are compiled before the
jtest:agentgoal is run. Your command line may resemble the following:mvn clean test-compile jtest:agent test jtest:jtest -Djtest.config="builtin://Unit Tests"
By default, Jtest collects coverage data for executed tests. To disable collecting coverage, enable the jtest.coverage.skip option (see Jtest Goals Reference for Maven for details).
Executing the jtest:agent goal before the classes are compiled, may result in empty coverage. If your build uses Tycho plugins, or any other plugins that are detached from the default lifecycle, invoke the dedicated (non-default) compiler to ensure that the classes are properly compiled and coverage information is collected. Your command line may resemble the following:
mvn clean tycho-compiler:compile jtest:agent verify jtest:jtest -Djtest.config="builtin://Unit Tests"
If you skip a test by calling a method from the org.junit.Assume (JUnit 4) or org.junit.jupiter.api.Assumptions (JUnit 5) class, Jtest collects coverage for code lines executed before the method is called. This coverage information is not associated with any test in the coverage report if the tests are executed with the JUnit 4 runner.
Jtest collects test coverage for Maven parallel builds, enabled with the -T option. For details, see https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3. For example:
mvn -T 1C clean test-compile jtest:agent test jtest:jtest -Djtest.config="builtin://Unit Tests"
Jtest supports collecting coverage for Surefire parallel test execution, but the coverage may not be correctly matched to each executed test.
About the jtest:agent Goal
The jtest:agent goal generates the Jtest agent settings based on the build modules, and sets the javaagent VM agument in the properties specified with the agentPropertyNames parameter in the initialize phase.
By default, it tries to inject javaagent VmArg into maven-surefire-plugin and eclipse-test-plugin through specific properties.
Prerequisites for using the jtest:agent goal with the Maven test plugins:
- tests must be executed in the forked process (for example, with the parameters
forkCountorforkMode) - additional VmArgs must contain Jtest javaagent VmArgs (the
argLineparameter)
The jtest:agent goal attempts to automatically configure the Maven test plugins (maven-surefire-plugin and tycho-surefire-plugin) by setting up the properties of their VmArgs parameters (by default through the argLine and tycho.testArgLine properties). You can customize the default values of these parameters if one of the following ways:
Through the default property. The
jtest:agentgoal will extend the properties with the Jtestjavaagent VmArg:<project> <!-- ... --> <properties> <!-- argLine property which will be extended by jtest:agent goal ---> <argLine>-Xmx=1024m -XX:MaxPermSize=256m</argLine> </properties> <!-- ... --> <build> <plugins><!-- or pluginManagement --> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkCount>1</forkCount> <!-- do not configure argLine parameter here --> </configuration> </plugin> </plugin> </build> </project>Through a parameter value with an injected custom property:
<project> <!-- ... --> <build> <plugins> <plugin> <groupId>com.parasoft.jtest</groupId> <artifactId>jtest-maven-plugin</artifactId> <version>2025.2.0</version> <configuration> <!-- jtest:agent goal will set Jtest Java agent VmArg into properties below --> <agentPropertyNames>jtest.argLine</agentPropertyNames> <!-- optional coverage block with parameters identical as in offline coverage --> <coverage> <!-- ... --> </coverage> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>${jtest.argLine} -Xmx=1024m -XX:MaxPermSize=256m</argLine> </configuration> </plugin> </plugin> </build> </project>
Executing Tests and Collecting Test Coverage for Tycho Builds
Jtest supports executing JUnit 4 tests and collecting test coverage for Tycho builds. However, due OSGi limitations, tests executed with the tycho-surefire-plugin require extended tycho-surefire configuration:
Deploy the runtime.jar file shipped with Jtest in
<INSTALL_DIR>/integration/coverageto one of the following:- The Maven repository. Your command line may resemble the following:
mvn deploy:deploy-file -Dfile=C:\parasoft\jtest\integration\coverage\runtime.jar -DrepositoryId=REPOSITORY_ID -Durl=REPOSITORY_URL -DartifactId=runtime-jtest -DgroupId=com.parasoft.jtest -Dversion=2025.2.0
- The local Maven repository. Your command line may resemble to following:
mvn install:install-file -Dfile=<C:\parasoft\jtest\integration\coverage\runtime.jar -DgroupId=com.parasoft.jtest -DartifactId=runtime-jtest -Dversion=2025.2.0 -Dpackaging=jar
Extend your tycho-surefire configuration by adding deployed the artifact as a framework extension. The configuration may resemble the following:
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-surefire-plugin</artifactId> <version>${tycho-version}</version> <configuration> <frameworkExtensions> <frameworkExtension> <groupId>com.parasoft.jtest</groupId> <artifactId>runtime-jtest</artifactId> <version>2025.2.0</version> </frameworkExtension> </frameworkExtensions> ... </plugin>
Alternatively, if you execute test without collecting coverage information, you can configure Jtest to obtain test results using the deprecated XML processing mechanism by adding the following option in the jtestcli.properties configuration file:
jtest.unittest.xml.results.processing.enabled=true
This will enable Jtest to include test results for Tycho builds in the Jtest report. Coverage data will not be included.
Note that enabling the deprecated XML processing mechanism may slow down test execution.
Collecting Application Coverage
Jtest's coverage agent allows you to collect coverage data during manual or automated tests performed on a running application. See Application Coverage for information about collecting application coverage with Jtest.