Class Stopwatch

java.lang.Object
org.junit.rules.Stopwatch
All Implemented Interfaces:
TestRule

public class Stopwatch extends Object implements TestRule
The Stopwatch Rule notifies one of its own protected methods of the time spent by a test.

Override them to get the time in nanoseconds. For example, this class will keep logging the time spent by each passed, failed, skipped, and finished test:

public static class StopwatchTest {
    private static final Logger logger = Logger.getLogger("");

    private static void logInfo(Description description, String status, long nanos) {
        String testName = description.getMethodName();
        logger.info(String.format("Test %s %s, spent %d microseconds",
                                  testName, status, TimeUnit.NANOSECONDS.toMicros(nanos)));
    }

    @Rule
    public Stopwatch stopwatch = new Stopwatch() {
        @Override
        protected void succeeded(long nanos, Description description) {
            logInfo(description, "succeeded", nanos);
        }

        @Override
        protected void failed(long nanos, Throwable e, Description description) {
            logInfo(description, "failed", nanos);
        }

        @Override
        protected void skipped(long nanos, AssumptionViolatedException e, Description description) {
            logInfo(description, "skipped", nanos);
        }

        @Override
        protected void finished(long nanos, Description description) {
            logInfo(description, "finished", nanos);
        }
    };

    @Test
    public void succeeds() {
    }

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

    @Test
    public void skips() {
        assumeTrue(false);
    }
}
An example to assert runtime:
@Test
public void performanceTest() throws InterruptedException {
    long delta = 30;
    Thread.sleep(300L);
    assertEquals(300d, stopwatch.runtime(MILLISECONDS), delta);
    Thread.sleep(500L);
    assertEquals(800d, stopwatch.runtime(MILLISECONDS), delta);
}
Since:
4.12
Author:
tibor17
  • Constructor Details

    • Stopwatch

      public Stopwatch()
  • Method Details

    • runtime

      public long runtime(TimeUnit unit)
      Gets the runtime for the test.
      Parameters:
      unit - time unit for returned runtime
      Returns:
      runtime measured during the test
    • succeeded

      protected void succeeded(long nanos, Description description)
      Invoked when a test succeeds
    • failed

      protected void failed(long nanos, Throwable e, Description description)
      Invoked when a test fails
    • skipped

      protected void skipped(long nanos, AssumptionViolatedException e, Description description)
      Invoked when a test is skipped due to a failed assumption.
    • finished

      protected void finished(long nanos, Description description)
      Invoked when a test method finishes (whether passing or failing)
    • apply

      public final 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.