The ClassRule annotation extends the idea of method-level Rules,
adding static fields that can affect the operation of a whole class. Any
subclass of ParentRunner, including the standard BlockJUnit4ClassRunner
and Suite classes, will support ClassRules.
For example, here is a test suite that connects to a server once before all the test classes run, and disconnects after they are finished:
@RunWith(Suite.class)
@SuiteClasses({A.class, B.class, C.class})
public class UsesExternalResource {
public static Server myServer= new Server();
@Rule
public static ExternalResource resource= new ExternalResource() {
@Override
protected void before() throws Throwable {
myServer.connect();
};
@Override
protected void after() {
myServer.disconnect();
};
};
}
In JUnit 4.9, fields that can be annotated with either @Rule or @ClassRule
should be of type TestRule. The old MethodRule type, which only made sense
for method-level rules, will still work, but is deprecated.
Most built-in Rules have been moved to the new type already, in a way that
should be transparent to most users. TestWatchman has been deprecated,
and replaced by TestWatcher, which has the same functionality, but implements
the new type.
TestRule is an abstract base class, and its abstract apply method is
protected. In order to apply TestRules to a Statement, use the RunRules
class in org.junit.rules (thanks to @kcooney)
The Common Public License that JUnit is released under is now included in the source repository.
github#74: Categories + Parameterized
In JUnit 4.8.2, the Categories runner would fail to run correctly if any contained test class had a custom Runner with a structure significantly different from the built-in Runner. With this fix, such classes can be assigned one or more categories at the class level, and will be run correctly. Trying to assign categories to methods within such a class will flag an error.
github#163: Bad comparison failure message when using assertEquals(String, String)
Thanks to @kcooney
Backed out unused folder "experimental-use-of-antunit", replaced by bash-based script at build_tests.sh
Made MultipleFailureException public, to assist extension writers.
Thanks to @kcooney