Pluggable linting utility for Java tests
The Java Gradle and Maven plugin for the test
task that reports presence of assert
s in a test method body.
Features:
- Prints the number of assert calls in each test method to the console
- Excludes ignored/disabled test classes and methods from linting
- Exclude tests that throw expected exceptions
- Limits the lint to recursively search from a top level package (for ex. 'org.samples')
- Allows verbose output
- Optionally loads test classes from the classpath
- Optionally condenses output to print only assert-less tests
Supported Testing Frameworks:
- JUnit 4
- JUnit 5
- TestNG
Supported build types:
- Gradle 4.9 and above
- Maven 3.5 and above
Installation:
Gradle:
- run
gradle clean build publish
from the root of the project. This will
- build core module
- build plugin-gradle module
- build samples module
- install core and plugin-gradle jars into your local maven repo and into
build
dir under the project root
To see the plugin in action, cd .\client-gradle
and run gradle cleanTest test
. You should see the summary table:
Package | Test file name | Test method name | # asserts |
---|---|---|---|
sample/junit4 | AssertJunit4Style.java | withoutAsserts | 0 |
sample/junit5 | AssertJunit5Style.java | withAsserts | 2 |
sample/testng | TestNgStyle.java | withAsserts | 1 |
sample/junit4 | AssertJunit4Style.java | withAsserts | 1 |
sample/testng | TestNgStyle.java | withoutAsserts | 0 |
sample | DummyTest.java | dummy | 0 |
sample/junit5 | AssertJunit5Style.java | withoutAsserts | 0 |
Maven:
- run
mvn clean install
from the root of the project. This will
- build core module
- build plugin-maven module
- build samples module
- install core jar into your local maven repo
Use:
Gradle:
In your build.gradle
I: add the java-lint-plugin
dependency to the buildscript
section:
buildscript {
dependencies {
classpath 'org.lint:plugin:0.3.0-SNAPSHOT'
}
}
II: Add the plugin: apply plugin: org.lint.azzert.LintTestsPlugin
III: Configure lint:
test{
...
lintAssert{
packageName = "sample" //optional or scan all
}
}
IV: run gradle clean test
Maven:
In your pom.xml
I: Include the plugin in the build plugins and optionally overwrite default values in the section
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>${maven-mojo-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.github.jpmorganchase.lint-assert</groupId>
<artifactId>lint-assert-maven-plugin</artifactId>
<version>0.3.0-SNAPSHOT</version>
<configuration>
<!-- optional or scan all -->
<packageName>sample</packageName>
</configuration>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>lint-assert</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
II: run mvn clean test
Available configuration options:
Option | Required? | Default value | Values | Purpose |
---|---|---|---|---|
includeClasspathJars | No | false | true, false | If true, scans classpath dependencies for test classes |
verbose | No | false | true, false | If true, produced a lot of output before it prints the summary table |
packageName | No | tests package name (for ex. org.lint in Maven or "org.lint" in Gradle) | A root package to start scanning for test classes. If not specified, scans all packages in a project. | |
printMode | No | ASSERTLESS_ONLY | Maven: {ALL, ASSERTLESS_ONLY}, Gradle: {"ALL", "ASSERTLESS_ONLY"} | Print ALL available test methods or ASSERTLESS_ONLY |
Future features:
- Credit use of AssertJ's asserts
- Credit use of Mockito's verify(...)
- Display results in alphabetic order of fully qualified test class name -
org.lint.PlaceholderTest
- or order by number of asserts - Print the linting summary: number of PASS/FAIL and a list of tests without verifications
- Support 3 output modes info, warn, and error:
- in warn mode, warn if linting found tests without verifications
- in error mode, fail the 'test' phase if linting found tests without verifications
- Allow users to specify additional test frameworks
- When running in an IntelliJ console, make package.class.method "clickable" and navigate to the method declaration
- Display a ratio of # of asserts to the size of the "method under test" and number of its conditions
- Lint nested test classes
- Lint nested methods (testing utility methods for ex.)
License
The Apache 2.0 License). Please see License for more information.