summaryrefslogtreecommitdiffstats
path: root/junit4/doc/ReleaseNotes4.9.txt
blob: 8b2a63d798b7483478d8277255ecc7e725592a37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
## 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