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:

  1. Ensure that the Jtest Plugin for Maven is set up (see Configuring the Jtest Plugin for Maven).
  2. Execute the jtest:agent and jtest:jtest goals with Maven. Ensure that the tests and classes are compiled before the jtest:agent goal 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"

(info) 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:

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:

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:

  1. Deploy the runtime.jar file shipped with Jtest in <INSTALL_DIR>/integration/coverage to 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
  2.  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.