1 package org.junit.tests.running.methods;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6
7 import org.junit.Test;
8 import org.junit.runner.JUnitCore;
9 import org.junit.runner.Result;
10 import org.junit.runner.notification.Failure;
11
12 public class ExpectedTest {
13
14 public static class Expected {
15 @Test(expected = Exception.class)
16 public void expected() throws Exception {
17 throw new Exception();
18 }
19 }
20
21 @Test
22 public void expected() {
23 JUnitCore core = new JUnitCore();
24 Result result = core.run(Expected.class);
25 assertTrue(result.wasSuccessful());
26 }
27
28 public static class Unexpected {
29 @Test(expected = Exception.class)
30 public void expected() throws Exception {
31 throw new Error();
32 }
33 }
34
35 @Test
36 public void unexpected() {
37 Result result = JUnitCore.runClasses(Unexpected.class);
38 Failure failure = result.getFailures().get(0);
39 String message = failure.getMessage();
40 assertTrue(message.contains("expected<java.lang.Exception> but was<java.lang.Error>"));
41 assertEquals(Error.class, failure.getException().getCause().getClass());
42 }
43
44 public static class NoneThrown {
45 @Test(expected = Exception.class)
46 public void nothing() {
47 }
48 }
49
50 @Test
51 public void noneThrown() {
52 JUnitCore core = new JUnitCore();
53 Result result = core.run(NoneThrown.class);
54 assertFalse(result.wasSuccessful());
55 String message = result.getFailures().get(0).getMessage();
56 assertTrue(message.contains("Expected exception: java.lang.Exception"));
57 }
58
59 public static class ExpectSuperclass {
60 @Test(expected = RuntimeException.class)
61 public void throwsSubclass() {
62 throw new ClassCastException();
63 }
64 }
65
66 @Test
67 public void expectsSuperclass() {
68 assertTrue(new JUnitCore().run(ExpectSuperclass.class).wasSuccessful());
69 }
70 }