A TestRule is an alteration in how a test method, or set of test methods, is run and reported. A {@link TestRule} may add additional checks that causea test that would otherwise fail to pass, or it may perform necessary setup or cleanup for tests, or it may observe test execution to report it elsewhere. {@link TestRule}s can do everything that could be done previously with methods annotated with {@link org.junit.Before}, {@link org.junit.After}, {@link org.junit.BeforeClass}, or {@link org.junit.AfterClass}, but they are more powerful, and more easily shared between projects and classes. The default JUnit test runners for suites and individual test cases recognize {@link TestRule}s introduced in two different ways. {@link org.junit.Rule} annotates method-level{@link TestRule}s, and {@link org.junit.ClassRule}annotates class-level {@link TestRule}s. See Javadoc for those annotations for more information. Multiple {@link TestRule}s can be applied to a test or suite execution. The {@link Statement} that executes the method or suite is passed to each annotated{@link org.junit.Rule} in turn, and each may return a substitute or modified{@link Statement}, which is passed to the next {@link org.junit.Rule}, if any. For examples of how this can be useful, see these provided TestRules, or write your own:
- {@link ErrorCollector}: collect multiple errors in one test method
- {@link ExpectedException}: make flexible assertions about thrown exceptions
- {@link ExternalResource}: start and stop a server, for example
- {@link TemporaryFolder}: create fresh files, and delete after test
- {@link TestName}: remember the test name for use during the method
- {@link TestWatcher}: add logic at events during method execution
- {@link Timeout}: cause test to fail after a set time
- {@link Verifier}: fail test if object state ends up incorrect
@since 4.9