Pluggable linting utility for Java tests
The Java Gradle and Maven plugin for the test task that reports presence of asserts 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 publishfrom 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 
builddir 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 installfrom 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.