001 package org.junit.runner.notification; 002 003 import java.io.Serializable; 004 005 import org.junit.internal.Throwables; 006 import org.junit.runner.Description; 007 008 /** 009 * A <code>Failure</code> holds a description of the failed test and the 010 * exception that was thrown while running it. In most cases the {@link org.junit.runner.Description} 011 * will be of a single test. However, if problems are encountered while constructing the 012 * test (for example, if a {@link org.junit.BeforeClass} method is not static), it may describe 013 * something other than a single test. 014 * 015 * @since 4.0 016 */ 017 public class Failure implements Serializable { 018 private static final long serialVersionUID = 1L; 019 020 /* 021 * We have to use the f prefix until the next major release to ensure 022 * serialization compatibility. 023 * See https://github.com/junit-team/junit4/issues/976 024 */ 025 private final Description fDescription; 026 private final Throwable fThrownException; 027 028 /** 029 * Constructs a <code>Failure</code> with the given description and exception. 030 * 031 * @param description a {@link org.junit.runner.Description} of the test that failed 032 * @param thrownException the exception that was thrown while running the test 033 */ 034 public Failure(Description description, Throwable thrownException) { 035 this.fThrownException = thrownException; 036 this.fDescription = description; 037 } 038 039 /** 040 * @return a user-understandable label for the test 041 */ 042 public String getTestHeader() { 043 return fDescription.getDisplayName(); 044 } 045 046 /** 047 * @return the raw description of the context of the failure. 048 */ 049 public Description getDescription() { 050 return fDescription; 051 } 052 053 /** 054 * @return the exception thrown 055 */ 056 057 public Throwable getException() { 058 return fThrownException; 059 } 060 061 @Override 062 public String toString() { 063 return getTestHeader() + ": " + fThrownException.getMessage(); 064 } 065 066 /** 067 * Gets the printed form of the exception and its stack trace. 068 */ 069 public String getTrace() { 070 return Throwables.getStacktrace(getException()); 071 } 072 073 /** 074 * Gets a the printed form of the exception, with a trimmed version of the stack trace. 075 * This method will attempt to filter out frames of the stack trace that are below 076 * the test method call. 077 */ 078 public String getTrimmedTrace() { 079 return Throwables.getTrimmedStackTrace(getException()); 080 } 081 082 /** 083 * Convenience method 084 * 085 * @return the message of the thrown exception 086 */ 087 public String getMessage() { 088 return getException().getMessage(); 089 } 090 }