org.junit.rules
Class Stopwatch

java.lang.Object
  extended by 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

Constructor Summary
Stopwatch()
           
 
Method Summary
 Statement apply(Statement base, Description description)
          Modifies the method-running Statement to implement this test-running rule.
protected  void failed(long nanos, Throwable e, Description description)
          Invoked when a test fails
protected  void finished(long nanos, Description description)
          Invoked when a test method finishes (whether passing or failing)
 long runtime(TimeUnit unit)
          Gets the runtime for the test.
protected  void skipped(long nanos, AssumptionViolatedException e, Description description)
          Invoked when a test is skipped due to a failed assumption.
protected  void succeeded(long nanos, 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

Stopwatch

public Stopwatch()
Method Detail

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.


Copyright © 2002–2021 JUnit. All rights reserved.