summaryrefslogtreecommitdiffstats
path: root/junit4/doc/ReleaseNotes4.7.txt
diff options
context:
space:
mode:
Diffstat (limited to 'junit4/doc/ReleaseNotes4.7.txt')
-rw-r--r--junit4/doc/ReleaseNotes4.7.txt194
1 files changed, 194 insertions, 0 deletions
diff --git a/junit4/doc/ReleaseNotes4.7.txt b/junit4/doc/ReleaseNotes4.7.txt
new file mode 100644
index 0000000..11b70c1
--- /dev/null
+++ b/junit4/doc/ReleaseNotes4.7.txt
@@ -0,0 +1,194 @@
+## Summary of Changes in version 4.7 ##
+
+### Rules ###
+
+- Rules allow very flexible addition or redefinition of the behavior
+ of each test method in a test class. Testers can reuse or extend one of the
+ provided Rules below, or write their own.
+
+ For more on this feature, see http://www.threeriversinstitute.org/blog/?p=155
+
+- The TemporaryFolder Rule allows creation of files and folders
+ that are guaranteed to be deleted when the test method finishes
+ (whether it passes or fails):
+
+ public static class HasTempFolder {
+ @Rule
+ public TemporaryFolder folder= new TemporaryFolder();
+
+ @Test
+ public void testUsingTempFolder() throws IOException {
+ File createdFile= folder.newFile("myfile.txt");
+ File createdFolder= folder.newFolder("subfolder");
+ // ...
+ }
+ }
+
+- ExternalResource is a base class for Rules (like TemporaryFolder)
+ that set up an external resource before a test (a file, socket, server,
+ database connection, etc.), and guarantee to tear it down afterward:
+
+ public static class UsesExternalResource {
+ Server myServer = new Server();
+
+ @Rule public ExternalResource resource = new ExternalResource() {
+ @Override
+ protected void before() throws Throwable {
+ myServer.connect();
+ };
+
+ @Override
+ protected void after() {
+ myServer.disconnect();
+ };
+ };
+
+ @Test public void testFoo() {
+ new Client().run(myServer);
+ }
+ }
+
+- The ErrorCollector Rule allows execution of a test to continue
+ after the first problem is found (for example, to collect _all_ the
+ incorrect rows in a table, and report them all at once):
+
+ public static class UsesErrorCollectorTwice {
+ @Rule
+ public ErrorCollector collector= new ErrorCollector();
+
+ @Test public void example() {
+ collector.addError(new Throwable("first thing went wrong"));
+ collector.addError(new Throwable("second thing went wrong"));
+ }
+ }
+
+- Verifier is a base class for Rules like ErrorCollector, which
+ can turn otherwise passing test methods into failing tests if a verification
+ check is failed
+
+ public static class ErrorLogVerifier() {
+ private ErrorLog errorLog = new ErrorLog();
+
+ @Rule
+ public MethodRule verifier = new Verifier() {
+ @Override public void verify() {
+ assertTrue(errorLog.isEmpty());
+ }
+ }
+
+ @Test public void testThatMightWriteErrorLog() {
+ // ...
+ }
+ }
+
+- TestWatchman is a base class for Rules that take note
+ of the testing action, without modifying it.
+ For example, this class will keep a log of each passing and failing
+ test:
+
+ public static class WatchmanTest {
+ private static String watchedLog;
+
+ @Rule
+ public MethodRule watchman= new TestWatchman() {
+ @Override
+ public void failed(Throwable e, FrameworkMethod method) {
+ watchedLog+= method.getName() + " "
+ + e.getClass().getSimpleName() + "\n";
+ }
+
+ @Override
+ public void succeeded(FrameworkMethod method) {
+ watchedLog+= method.getName() + " " + "success!\n";
+ }
+ };
+
+ @Test
+ public void fails() {
+ fail();
+ }
+
+ @Test
+ public void succeeds() {
+ }
+ }
+
+- The TestName Rule makes the current test name available inside test methods:
+
+ public class NameRuleTest {
+ @Rule public TestName name = new TestName();
+
+ @Test public void testA() {
+ assertEquals("testA", name.getMethodName());
+ }
+
+ @Test public void testB() {
+ assertEquals("testB", name.getMethodName());
+ }
+ }
+
+- The Timeout Rule applies the same timeout to all test methods in a class:
+
+ public static class HasGlobalTimeout {
+ public static String log;
+
+ @Rule public MethodRule globalTimeout = new Timeout(20);
+
+ @Test public void testInfiniteLoop1() {
+ log+= "ran1";
+ for(;;) {}
+ }
+
+ @Test public void testInfiniteLoop2() {
+ log+= "ran2";
+ for(;;) {}
+ }
+ }
+
+- The ExpectedException Rule allows in-test specification
+ of expected exception types and messages:
+
+ public static class HasExpectedException {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsNothing() {
+
+ }
+
+ @Test
+ public void throwsNullPointerException() {
+ thrown.expect(NullPointerException.class);
+ throw new NullPointerException();
+ }
+
+ @Test
+ public void throwsNullPointerExceptionWithMessage() {
+ thrown.expect(NullPointerException.class);
+ thrown.expectMessage("happened?");
+ thrown.expectMessage(startsWith("What"));
+ throw new NullPointerException("What happened?");
+ }
+ }
+
+### Timeouts ###
+- Tests that time out now show the stack trace of the test thread.
+
+### Matchers ###
+- Due to typing incompatibilities, JUnit is still including the 1.1 release
+ of hamcrest. This is not a change from 4.6, but is a change from
+ pre-beta releases of 4.7. Due to this incompatibility, tests using
+ Hamcrest 1.2 must still use the MatcherAssert.assertThat method from
+ Hamcrest, not Assert.assertThat from JUnit.
+
+### Docs ###
+- Javadocs now link to online JDK javadocs (bug 2090230)
+- Parameterized runner javadocs improved (bug 2186792)
+- Fixed Javadoc code sample for AfterClass (2126279)
+- Fixed Javadoc for assertArraysEqual(float[], float[])
+
+### Bug fixes ###
+- Fixed: BaseTestRunner.getTest() requires class to extend TestCase (1812200)
+- Fixed: Suite does not allow for inheritance in annotations (2783118)
+- Fixed: ParallelComputer skipped tests that took longer than 2 seconds