OpenClover 4.4.0 Release Notes

Welcome! A lot of time has passed since the previous release, but we're thrilled to announce our new OpenClover 4.4! In this release we focused on improving Maven integration, delivering a number of useful and highly requested features. But you will find a lot of other goodies too!

Features

Maven plugin

Method contexts with code metrics

The clover:setup and clover:instr goals now allows you to fine-tune scope of code coverage with a new methodWithMetricsContext option. In the methodContext option it was possible to define a name pattern for methods, which shall be excluded from code coverage measurement. With this new option you can define not ony regular expression for entire method signature but also code metrics.
 
For example:
<methodWithMetricsContexts>
    <methodWithMetricsContext>
        <name>simpleGetter</name>
        <regexp>public .* get.*\(\)</regexp>
        <maxComplexity>1</maxComplexity> <!-- at most 1 cycle (optional) -->
        <maxStatements>1</maxStatements> <!-- at most 1 statement (optional) -->
        <maxAggregatedComplexity>2</maxAggregatedComplexity> <!-- no more than 2 cycles including inline classes (optional) -->
        <maxAggregatedStatements>10</maxAggregatedStatements> <!-- no more than 10 statements including inline classes (optional) -->
    </methodWithMetricsContext>
    <!-- can add more methodWithMetricsContext -->
</methodWithMetricsContexts>
will define a context called 'simpleGetter' which matches all public get*() methods containing at most one statement; this statement may contain more complex logic (an anonymous inline class) but not more than 10 statements in total; in addition to this aggregated cyclomatic cannot exceed 2 cycles.

Custom test detector patterns

In Ant plugin it is possible to configure in <clover-setup> or <clover-instr> which files, classes and methods are test ones. This allows to handle custom test frameworks or even external test tools. Now this is possible in Maven too, although the configuration is slightly different due differences between Ant and Maven build systems (Ant - file sets with sources, Maven - main/test source roots).
 
In clover:setup and clover:instr goals you can define the testSources configuration option, which is really very robust and flexible. You can define your tests not only on a file level (includes and excludes), but also on a class level (matching all elements from a class signature) and even fine-tune it on a method level (again, entire method signature).
 
Example:
<testSources>
    <includes>
        <include>**/*</include>
        <include>*WebTest.java</include>
        <include>**/*IT.java</include>
    </includes>
    <excludes>
        <exclude>deprecated/**</exclude>
    </excludes>
    <testClasses>
        <testClass> <!-- 0..N occurrences -->
        <name>.*Test</name>
        <super>WebTest</super>
        <annotation>@Repeat</annotation>
        <package>org\.openclover\..*</package>
        <tag>@chrome</tag>
        <testMethods> <!-- 0..N occurrences -->
            <testMethod>
            <name>check.*</name>
            <annotation>@Test</annotation>
            <tag>@web</tag>
            <returnType>void</returnType>
            </testMethod>
        </testMethods>
        </testClass>
    </testClasses>
</testSources>

Include failed test coverage

In the clover:check and clover:clover goals you can use includeFailedTestCoverage. When enabled, code coverage related with failed tests will be included when calculating the total coverage percentage. This can you help to get more stable test coverage results in case of failing or flaky tests.

Show unique per-test coverage

With this option OpenClover will calculate and show unique per-test coverage in reports. Unique means that given piece of business logic is covered by only one test. It can help you to better plan writing new tests.

Maven 2.x is unsupported

OpenClover 4.4 no longer supports Maven 2.x. Minimum Maven version required is 3.0.4.

JUnit5 support

Although OpenClover is flexible enough to handle any test framework it's always better to have support out-of-the box. So here you are! OpenClover now: We'd like to say huge Thank you! for James Spagnola who implemented this feature.

Bamboo 6.9 with OpenClover

Bamboo 6.9 has built-in support for not only Atlassian Clover but also OpenClover. It means that you no longer have to use manual integration (by adding clover targets or goals in your pom.xml or build.xml files), but you can not enable OpenClover with a single click thanks to the automatic integration feature, which works for Ant, Maven and Grails tasks.
 
Read the Bamboo 6.9 Release Notes to learn more.

New options for CloverInstr

In the course of implementation of enhancements for Maven, the CloverInstr commandline tool got a lot of new options as well: Examples:
-mce 'trivialGetter;public.*get.*\(\);;;1;1'
-tsr 'src/test/java'
-tsi '**/*Test.java,**/*IT.java'
-tse '**/TestBase*.java,**/*TestUtil.java'
-tsc '.*Test;com\.acme\..*'         - match by a package and a class name
-tsc ';;@RunWith'                   - match by a class annotation
-tsc ';;;;@test'                    - match by a javadoc tag
-tsm 'test.*'  - match all methods prefixed with 'test'
-tsm ';@Test;void'  - match all void methods annotated with '@Test'
-tsm ';;;@test' - match all methods having a '@test' javadoc tag
        

Upgrading from OpenClover 4.3.x

Clover for Ant

Simply download new Clover-for-Ant zip file and use the clover.jar from it.

Clover for Eclipse

Download new update site ZIP and install in your Eclipse.

Clover for IDEA

Download new plugin JAR and install in your IDEA.

Clover Maven Plugin

Bump version number to 4.4.0 for 'org.openclover:clover-maven-plugin' and 'org.openclover:clover' in your pom.xml files.

Grails Clover Plugin

Upgrade to version 4.4.0.

Bamboo Clover Plugin

Upgrade to Bamboo 6.9. You will get automatic integration feature for OpenClover. In case of Maven and Grails tasks it automatically integrates with the latest OpenClover version. In case of Ant tasks it integrates with OpenClover 4.3.1 (you can switch to manual integration to use the latest version).

Jenkins Clover Plugin

Upgrade to the latest 4.11.0 plugin version.

Hudson Clover Plugin

Upgrade to the latest 4.9.0 plugin version.

Gradle Clover Plugin

We have not released the OpenClover version of the Gradle plugin yet. You can find its source code here: https://bitbucket.org/openclover/gradle-clover-plugin

Changelog

2019.09.26 OpenClover 4.4.0