fuin.org
Small Open Source Java Tools and Libraries
Asserting test coverage
A good approach is to have at least one test class for every production class.
If you have classes this rule-of-thumb does not apply, you can:- Write a dummy test class with a comment that describes why not...
- Use an AssertCoverage.ClassFilter to exclude the classes
Test all classes in "src/main/java":
@Test public final void testCoverage() { AssertCoverage.assertEveryClassHasATest(new File("src/main/java")); }
Example how to exclude all sub classes of a "BaseEntity" class and classes defined in a property file:
@Test public final void testCoverage() { // Define base source code directory final File baseDir = new File("src/main/java"); // Exclude all classes of a common type final AssertCoverage.ClassFilter filterEntities = new AssertCoverage.ClassFilter() { public boolean isIncludeClass(final Class<?> clasz) { return !BaseEntity.class.isAssignableFrom(clasz); } }; // Exclude all classes defined in a property file with // format "full.qualified.class.name=comment": // assertcoverage.ExampleExcludedClass=Already tested by integration test final Properties excludes = Utils4J.loadProperties(ExampleExcludedClass.class, "excludeClasses.properties"); final Set<Object> keySet = excludes.keySet(); final String[] fqnClassNames = keySet.toArray(new String[keySet.size()]); final AssertCoverage.ExcludeListClassFilter filterClasses = new AssertCoverage.ExcludeListClassFilter(fqnClassNames); // Create AND filter final AssertCoverage.AndClassFilter filter = new AssertCoverage.AndClassFilter(filterEntities, filterClasses); // Start test AssertCoverage.assertEveryClassHasATest(baseDir, filter); }