org.junit.rules

## Class TestWatcher

- java.lang.Object
- - org.junit.rules.TestWatcher

- All Implemented Interfaces:
    TestRule
  Direct Known Subclasses:
    TestName

      public abstract class TestWatcher
      extends Object
      implements TestRule

  TestWatcher 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 TestWatcher watchman= new TestWatcher() {
            @Override
            protected void failed(Throwable e, Description description) {
                watchedLog+= description + "\n";
            }

            @Override
            protected void succeeded(Description description) {
                watchedLog+= description + " " + "success!\n";
               }
           };

        @Test
        public void fails() {
            fail();
        }

        @Test
        public void succeeds() {
           }
       }

  Since:
    4.9

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `TestWatcher()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Statement` | `apply(Statement base, Description description)` Modifies the method-running `Statement` to implement this test-running rule.
    `protected void` | `failed(Throwable e, Description description)` Invoked when a test fails
    `protected void` | `finished(Description description)` Invoked when a test method finishes (whether passing or failing)
    `protected void` | `skipped(org.junit.internal.AssumptionViolatedException e, Description description)` Invoked when a test is skipped due to a failed assumption.
    `protected void` | `starting(Description description)` Invoked when a test is about to start
    `protected void` | `succeeded(Description description)` Invoked when a test succeeds

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### TestWatcher

          public TestWatcher()

  - ### Method Detail

    - #### apply

          public Statement apply(Statement base,
                        Description description)

      Description copied from interface: `TestRule`
      Modifies the method-running `Statement` to implement this test-running rule.
      Specified by:
        `apply` in interface `TestRule`
      Parameters:
        `base` - The `Statement` to be modified
        `description` - A `Description` of the test implemented in `base`
      Returns:
        a new statement, which may be the same as `base`, a wrapper around `base`, or a completely new Statement.

    - #### succeeded

          protected void succeeded(Description description)

      Invoked when a test succeeds

    - #### failed

          protected void failed(Throwable e,
                    Description description)

      Invoked when a test fails

    - #### skipped

          protected void skipped(org.junit.internal.AssumptionViolatedException e,
                     Description description)

      Invoked when a test is skipped due to a failed assumption.

    - #### starting

          protected void starting(Description description)

      Invoked when a test is about to start

    - #### finished

          protected void finished(Description description)

      Invoked when a test method finishes (whether passing or failing)