| ## Summary of Changes in version 4.9, final ## |
| |
| Release theme: Test-class and suite level Rules. |
| |
| ### ClassRule ### |
| |
| 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 `ClassRule`s. |
| |
| 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(); |
| |
| @ClassRule |
| public static ExternalResource resource= new ExternalResource() { |
| @Override |
| protected void before() throws Throwable { |
| myServer.connect(); |
| }; |
| |
| @Override |
| protected void after() { |
| myServer.disconnect(); |
| }; |
| }; |
| } |
| |
| ### TestRule ### |
| |
| 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. |
| |
| ### Maven support ### |
| |
| Maven bundles have, in the past, been uploaded by kind volunteers. Starting |
| with this release, the JUnit team is attempting to perform this task ourselves. |
| |
| ### LICENSE checked in ### |
| |
| The Common Public License that JUnit is released under is now included |
| in the source repository. |
| |
| ### Bug fixes ### |
| |
| - github#98: assumeTrue() does not work with expected exceptions |
| - 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#38: ParentRunner filters more than once |
| |
| Thanks to `@reinholdfuereder` |
| |
| - github#248: protected BlockJUnit4ClassRunner#rules method removed from 4.8.2 |
| - github#187: Accidental dependency on Java 6 |
| |
| Thanks to `@kcooney` for: |
| |
| - github#163: Bad comparison failure message when using assertEquals(String, String) |
| - github#227: ParentRunner now assumes that getChildren() returns a modifiable list |
| |
| ### Minor changes ### |
| |
| - Backed out unused folder "experimental-use-of-antunit", replaced by |
| bash-based script at build_tests.sh |
| - Various Javadoc fixes |
| |
| Thanks to `@kcooney` for: |
| |
| - Made MultipleFailureException public, to assist extension writers. |
| - github#240: Add "test" target to build.xml, for faster ant-driven testing. |
| - github#247: Give InitializationError a useful message |