JAllele is a mutation testing tool for Java. By design, all mutants generated are valid and it aspires to avoid equivalent mutants.
For full documentation, usage examples, and development information, see docs/.
Build the project:
$ ./gradlew build
Run JUnit sample:
$ java -Djdk.attach.allowAttachSelf=true -jar jallele-cmdline/build/libs/jallele-cmdline-test-*.jar --junit --count 10 \
--source-classes com.github.gliptak.jallele.SimpleClass --test-classes com.github.gliptak.jallele.SimpleClassJUnitTest
Run with a specific seed for reproducible mutations:
$ java -Djdk.attach.allowAttachSelf=true -jar jallele-cmdline/build/libs/jallele-cmdline-test-*.jar --junit --count 10 \
--seed 12345 --source-classes com.github.gliptak.jallele.SimpleClass --test-classes com.github.gliptak.jallele.SimpleClassJUnitTest
Run with classpath discovery:
$ java -Djdk.attach.allowAttachSelf=true -jar jallele-cmdline/build/libs/jallele-cmdline-test-*.jar --junit --count 10 \
--source-path target/classes --source-patterns 'com.example.**' \
--test-path target/test-classes --test-patterns 'com.example.**Test'
For more examples and detailed usage, see CLI Examples.
JAllele supports two formats for specifying classes to test:
Directly specify class names:
--source-classes com.example.MyClass --test-classes com.example.MyClassTestSpecify classpaths (directories or JAR files) and patterns to match classes:
--source-path target/classes --source-patterns 'com.example.**' \
--test-path target/test-classes --test-patterns 'com.example.**Test'*- Matches any characters within a single package segment**- Matches any number of package segments (including zero)
Examples:
com.example.**- All classes in com.example and subpackages**Test- All classes ending with "Test"com.example.*Utils- Utility classes in com.example package only
Note: JUnit requires test classes to be public. Some projects (like Apache Commons Lang) use package-private test classes that cannot be run through JAllele's pattern-based discovery. In such cases, use explicit class names with --source-classes and --test-classes, or test your own projects where test classes are public.
For projects with multiple modules, specify multiple paths:
--source-path module1/target/classes module2/target/classes module3/target/classes \
--test-path module1/target/test-classes module2/target/test-classes module3/target/test-classesSee CLI Examples for comprehensive examples including Apache Commons Lang and Google Guava.
Contributions, issues, pull requests are welcome.