The JUnit DynamicSuite is a library used to create a dynamic Suite of JUnit Tests from a directory. The Unit Tests can be filtered dynamically by annotating the Suite with a filter.
-
junit Version 4.x
-
java >= 1.6
To get your started just annotate a class with
@RunWith(DynamicSuite.class) @Filter(DefaultFilter.class) @Directory
This will run all Tests ending with “Test” in the directory
target/test-classes
which is specified as default in the Directory Annotation.
Instead of using @Directory you might use as well
@ClassPath(includeJars = true)
which scans the ClassPath for test classes. The Parameter includeJars allows you to control wether to scan the jars on the classpath (default false - only directories).
To create a custom filter you may either implement the interface TestClassFilter or extend the DefaultFilter.
Available with Version 0.2.5:
You may use the Annotation @Directories to search for test classes in multiple directories.
@Directories({"bin", "target/classes"}) @Directories({"src/test/java", "src/test/generated"})
Available with Version 0.2.3:
You may use the Annotation @Sort to sort the tests by TestName or Randomize them.
@Sort(SortBy.TESTNAME) //sort by Name of Test @Sort(SortBy.RANDOM) //run Tests in a random order @Sort(value = SortBy.CUSTOM, customSort=<<class implementing TestSort>>.class)
You can let the dynamic suite directly implement the TestClassFilter interface as shown below.
@RunWith(DynamicSuite.class) @Filter(IntegrationSuite.class) @Directory("test/out") @Sort(SortBy.RANDOM) public class IntegrationSuite implements TestClassFilter { @Override public boolean include(String className) { return className.endsWith("ITCase"); } @Override public boolean include(Class cls) { return cls.getAnnotation(Ignore.class) == null; } }
Either include the library directly by downloading it here or include it in Maven (from Maven Central Repository):
<dependency> <groupId>com.github.cschoell</groupId> <artifactId>junit-dynamicsuite</artifactId> <version>0.2.5</version> <scope>test</scope> </dependency>
Copyright © 2013 Christof Schoell
The files in this archive are released under the Apache 2.0 license.
You may obtain a copy of this license under www.apache.org/licenses/LICENSE-2.0