Class Timeout

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

public class Timeout extends Object implements TestRule
The Timeout Rule applies the same timeout to all test methods in a class:
 public static class HasGlobalLongTimeout {

  @Rule
  public Timeout globalTimeout = Timeout.millis(20);

  @Test
  public void run1() throws InterruptedException {
      Thread.sleep(100);
  }

  @Test
  public void infiniteLoop() {
      while (true) {}
  }
 }
 

Each test is run in a new thread. If the specified timeout elapses before the test completes, its execution is interrupted via Thread.interrupt(). This happens in interruptable I/O and locks, and methods in Object and Thread throwing InterruptedException.

A specified timeout of 0 will be interpreted as not set, however tests will still launch from separate threads. This can be useful for disabling timeouts in environments where they are dynamically set based on some property.

Since:
4.7
  • Field Details

    • timeout

      private final long timeout
    • timeUnit

      private final TimeUnit timeUnit
    • lookForStuckThread

      private final boolean lookForStuckThread
  • Constructor Details

    • Timeout

      @Deprecated public Timeout(int millis)
      Deprecated.
      Create a Timeout instance with the timeout specified in milliseconds.

      This constructor is deprecated.

      Instead use Timeout(long, java.util.concurrent.TimeUnit), millis(long), or seconds(long).

      Parameters:
      millis - the maximum time in milliseconds to allow the test to run before it should timeout
    • Timeout

      public Timeout(long timeout, TimeUnit timeUnit)
      Create a Timeout instance with the timeout specified at the timeUnit of granularity of the provided TimeUnit.
      Parameters:
      timeout - the maximum time to allow the test to run before it should timeout
      timeUnit - the time unit for the timeout
      Since:
      4.12
    • Timeout

      protected Timeout(Timeout.Builder builder)
      Create a Timeout instance initialized with values from a builder.
      Since:
      4.12
  • Method Details

    • builder

      public static Timeout.Builder builder()
      Returns a new builder for building an instance.
      Since:
      4.12
    • millis

      public static Timeout millis(long millis)
      Creates a Timeout that will timeout a test after the given duration, in milliseconds.
      Since:
      4.12
    • seconds

      public static Timeout seconds(long seconds)
      Creates a Timeout that will timeout a test after the given duration, in seconds.
      Since:
      4.12
    • getTimeout

      protected final long getTimeout(TimeUnit unit)
      Gets the timeout configured for this rule, in the given units.
      Since:
      4.12
    • getLookingForStuckThread

      protected final boolean getLookingForStuckThread()
      Gets whether this Timeout will look for a stuck thread when the test times out.
      Since:
      4.12
    • createFailOnTimeoutStatement

      protected Statement createFailOnTimeoutStatement(Statement statement) throws Exception
      Creates a Statement that will run the given statement, and timeout the operation based on the values configured in this rule. Subclasses can override this method for different behavior.
      Throws:
      Exception
      Since:
      4.12
    • 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.