• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  package org.junit.rules;
2  
3  import org.junit.internal.AssumptionViolatedException;
4  import org.junit.runner.Description;
5  import org.junit.runners.model.Statement;
6  
7  /**
8   * TestWatcher is a base class for Rules that take note of the testing
9   * action, without modifying it. For example, this class will keep a log of each
10   * passing and failing test:
11   *
12   * <pre>
13   * public static class WatchmanTest {
14   * 	private static String watchedLog;
15   *
16   * 	&#064;Rule
17   * 	public MethodRule watchman= new TestWatcher() {
18   * 		&#064;Override
19   * 		protected void failed(Description d) {
20   * 			watchedLog+= d + &quot;\n&quot;;
21   * 		}
22   *
23   * 		&#064;Override
24   * 		protected void succeeded(Description d) {
25   * 			watchedLog+= d + &quot; &quot; + &quot;success!\n&quot;;
26   * 		}
27   * 	};
28   *
29   * 	&#064;Test
30   * 	public void fails() {
31   * 		fail();
32   * 	}
33   *
34   * 	&#064;Test
35   * 	public void succeeds() {
36   * 	}
37   * }
38   * </pre>
39   */
40  public abstract class TestWatcher implements TestRule {
apply(final Statement base, final Description description)41  	public Statement apply(final Statement base, final Description description) {
42  		return new Statement() {
43  			@Override
44  			public void evaluate() throws Throwable {
45  				starting(description);
46  				try {
47  					base.evaluate();
48  					succeeded(description);
49  				} catch (AssumptionViolatedException e) {
50  					throw e;
51  				} catch (Throwable t) {
52  					failed(t, description);
53  					throw t;
54  				} finally {
55  					finished(description);
56  				}
57  			}
58  		};
59  	}
60  
61  	/**
62  	 * Invoked when a test succeeds
63  	 *
64  	 * @param description
65  	 */
66  	protected void succeeded(Description description) {
67  	}
68  
69  	/**
70  	 * Invoked when a test fails
71  	 *
72  	 * @param e
73  	 * @param description
74  	 */
75  	protected void failed(Throwable e, Description description) {
76  	}
77  
78  	/**
79  	 * Invoked when a test is about to start
80  	 *
81  	 * @param description
82  	 */
83  	protected void starting(Description description) {
84  	}
85  
86  
87  	/**
88  	 * Invoked when a test method finishes (whether passing or failing)
89  	 *
90  	 * @param description
91  	 */
92  	protected void finished(Description description) {
93  	}
94  }
95