1 package org.junit.runner.notification;
2
3 import java.io.PrintWriter;
4 import java.io.Serializable;
5 import java.io.StringWriter;
6
7 import org.junit.runner.Description;
8
9 /**
10 * A <code>Failure</code> holds a description of the failed test and the
11 * exception that was thrown while running it. In most cases the {@link org.junit.runner.Description}
12 * will be of a single test. However, if problems are encountered while constructing the
13 * test (for example, if a {@link org.junit.BeforeClass} method is not static), it may describe
14 * something other than a single test.
15 *
16 * @since 4.0
17 */
18 public class Failure implements Serializable {
19 private static final long serialVersionUID = 1L;
20
21 /*
22 * We have to use the f prefix until the next major release to ensure
23 * serialization compatibility.
24 * See https://github.com/junit-team/junit/issues/976
25 */
26 private final Description fDescription;
27 private final Throwable fThrownException;
28
29 /**
30 * Constructs a <code>Failure</code> with the given description and exception.
31 *
32 * @param description a {@link org.junit.runner.Description} of the test that failed
33 * @param thrownException the exception that was thrown while running the test
34 */
35 public Failure(Description description, Throwable thrownException) {
36 this.fThrownException = thrownException;
37 this.fDescription = description;
38 }
39
40 /**
41 * @return a user-understandable label for the test
42 */
43 public String getTestHeader() {
44 return fDescription.getDisplayName();
45 }
46
47 /**
48 * @return the raw description of the context of the failure.
49 */
50 public Description getDescription() {
51 return fDescription;
52 }
53
54 /**
55 * @return the exception thrown
56 */
57
58 public Throwable getException() {
59 return fThrownException;
60 }
61
62 @Override
63 public String toString() {
64 return getTestHeader() + ": " + fThrownException.getMessage();
65 }
66
67 /**
68 * Convenience method
69 *
70 * @return the printed form of the exception
71 */
72 public String getTrace() {
73 StringWriter stringWriter = new StringWriter();
74 PrintWriter writer = new PrintWriter(stringWriter);
75 getException().printStackTrace(writer);
76 return stringWriter.toString();
77 }
78
79 /**
80 * Convenience method
81 *
82 * @return the message of the thrown exception
83 */
84 public String getMessage() {
85 return getException().getMessage();
86 }
87 }