CodeSheriff is a simple library that helps you in writing JUnit tests that check the quality of your code. For example, CodeSheriff may fail because you have methods in your code that have more than X lines of code, or that have complexity greater than Y.
CodeSheriff is highly flexible and lets you define the quality rules through a very simple DSL. No more complicated configurations in complicated code quality tools. Just write a test!
This framework was highly inspired by ArchUnit. If you want to write unit tests to check architectural conformance, check that framework!
Note that this is still just a prototype and is not yet battle tested. Help me out here!
The best way to understand CodeSheriff is by means of examples. See the test class below:
import com.github.mauricioaniche.codesheriff.dsl.CodeSheriff;
import com.github.mauricioaniche.codesheriff.junit.CodeSheriffJUnit5;
public class SheriffRunnerJUnitTest extends CodeSheriffJUnit5 {
// it can be a method that returns 'CodeSheriff' ...
CodeSheriff complexity() {
CodeSheriff sheriff = new CodeSheriff();
sheriff.thatEnsures()
.methods()
.inClassesOfPackage("a.b.c")
.withExceptionOfClass("Abc")
.have()
.complexity(m -> m < 10);
return sheriff;
}
// ... or a field!
CodeSheriff loc = new CodeSheriff()
.thatEnsures()
.methods()
.inClassesOfPackage("fixture.f3")
.withExceptionOfMethod("abc")
.have()
.linesOfCode(m -> m < 100);
}
For CodeSheriff to work, all you need to do it:
- Create a class that extends from the provided
CodeSheriffJUnit
class. - Write as many _CodeSheriff_s as you want. A CodeSheriff is basically a rule that the library will check later.
- See the
complexity
rule. It ensures that all methods within thea.b.c
package have complexity of less than 10. Complexity here is basically cyclomatic complexity (i.e., the number of ifs, fors, while, etc, in your code) - See the
loc
rule. It ensures that all classes in thea.b.c
package have less than 100 lines of code.
This class is a JUnit 5 test class. Just run it. If no rules are broken in your code, then, the test passes. If a rule is broken, CodeSheriff will list you all the classes and methods that break a rule.
Simply add it to your Maven or Gradle file:
<dependency>
<groupId>com.github.mauricioaniche</groupId>
<artifactId>codesheriff</artifactId>
<version>0.2.0</version>
<scope>test</scope>
</dependency>
CodeSheriff builds the AST of your entire source code and collect code metrics. This is done by my other library, CK.
This means that checking the rules may take a while depending on the size of your project.
Just use the DSL to explore all the options.
This code is licensed under the MIT license.