@Timeout
is used to define a timeout for a method or all testable
methods within one class and its @Nested
classes.
This annotation may also be used on lifecycle methods annotated with
@BeforeAll
, @BeforeEach
,
@AfterEach
, or @AfterAll
.
Applying this annotation to a test class has the same effect as applying
it to all testable methods, i.e. all methods annotated or meta-annotated with
@Test
, @TestFactory
, or
@TestTemplate
, but not to its lifecycle methods.
Default Timeouts
If this annotation is not present, no timeout will be used unless a default timeout is defined via one of the following configuration parameters:
- "junit.jupiter.execution.timeout.default"
- Default timeout for all testable and lifecycle methods
- "junit.jupiter.execution.timeout.testable.method.default"
- Default timeout for all testable methods
- "junit.jupiter.execution.timeout.test.method.default"
- Default timeout for
@Test
methods - "junit.jupiter.execution.timeout.testtemplate.method.default"
- Default timeout for
@TestTemplate
methods - "junit.jupiter.execution.timeout.testfactory.method.default"
- Default timeout for
@TestFactory
methods - "junit.jupiter.execution.timeout.lifecycle.method.default"
- Default timeout for all lifecycle methods
- "junit.jupiter.execution.timeout.beforeall.method.default"
- Default timeout for
@BeforeAll
methods - "junit.jupiter.execution.timeout.beforeeach.method.default"
- Default timeout for
@BeforeEach
methods - "junit.jupiter.execution.timeout.aftereach.method.default"
- Default timeout for
@AfterEach
methods - "junit.jupiter.execution.timeout.afterall.method.default"
- Default timeout for
@AfterAll
methods
More specific configuration parameters override less specific ones. For example, "junit.jupiter.execution.timeout.test.method.default" overrides "junit.jupiter.execution.timeout.testable.method.default" which overrides "junit.jupiter.execution.timeout.default".
Supported Values
Values for timeouts must be in the following, case-insensitive format:
<number> [ns|μs|ms|s|m|h|d]
. The space between the number and the
unit may be omitted. Specifying no unit is equivalent to using seconds.
Value | Equivalent annotation |
---|---|
42 | @Timeout(42) |
42 ns | @Timeout(value = 42, unit = NANOSECONDS) |
42 μs | @Timeout(value = 42, unit = MICROSECONDS) |
42 ms | @Timeout(value = 42, unit = MILLISECONDS) |
42 s | @Timeout(value = 42, unit = SECONDS) |
42 m | @Timeout(value = 42, unit = MINUTES) |
42 h | @Timeout(value = 42, unit = HOURS) |
42 d | @Timeout(value = 42, unit = DAYS) |
Disabling Timeouts
You may use the "junit.jupiter.execution.timeout.mode" configuration parameter to explicitly enable or disable timeouts.
Supported values:
enabled
: enables timeoutsdisabled
: disables timeoutsdisabled_on_debug
: disables timeouts while debugging
- Since:
- 5.5
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
ThreadMode
is use to define whether the test code should be executed in the thread of the calling code or in a separated thread. -
Required Element Summary
-
Optional Element Summary
Modifier and TypeOptional ElementDescriptionThe thread mode of this timeout.The time unit of this timeout. -
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Property name used to set the default timeout for all@AfterAll
methods: "junit.jupiter.execution.timeout.afterall.method.default".static final String
Property name used to set the default timeout for all@AfterEach
methods: "junit.jupiter.execution.timeout.aftereach.method.default".static final String
Property name used to set the default timeout for all@BeforeAll
methods: "junit.jupiter.execution.timeout.beforeall.method.default".static final String
Property name used to set the default timeout for all@BeforeEach
methods: "junit.jupiter.execution.timeout.beforeeach.method.default".static final String
Property name used to set the default timeout for all lifecycle methods: "junit.jupiter.execution.timeout.lifecycle.method.default".static final String
Property name used to set the default timeout for all@TestFactory
methods: "junit.jupiter.execution.timeout.testfactory.method.default".static final String
Property name used to set the default timeout for all@Test
methods: "junit.jupiter.execution.timeout.test.method.default".static final String
Property name used to set the default timeout for all@TestTemplate
methods: "junit.jupiter.execution.timeout.testtemplate.method.default".static final String
Property name used to set the default timeout for all testable methods: "junit.jupiter.execution.timeout.testable.method.default".static final String
Property name used to set the default timeout for all testable and lifecycle methods: "junit.jupiter.execution.timeout.default".static final String
Property name used to set the default thread mode for all testable and lifecycle methods: "junit.jupiter.execution.timeout.thread.mode.default".static final String
Property name used to configure whether timeouts are applied to tests: "junit.jupiter.execution.timeout.mode".
-
Field Details
-
DEFAULT_TIMEOUT_PROPERTY_NAME
Property name used to set the default timeout for all testable and lifecycle methods: "junit.jupiter.execution.timeout.default".The value of this property will be used unless overridden by a more specific property or a
@Timeout
annotation present on the method or on an enclosing test class (for testable methods).Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_TESTABLE_METHOD_TIMEOUT_PROPERTY_NAME
Property name used to set the default timeout for all testable methods: "junit.jupiter.execution.timeout.testable.method.default".The value of this property will be used unless overridden by a more specific property or a
@Timeout
annotation present on the testable method or on an enclosing test class.This property overrides the "junit.jupiter.execution.timeout.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_TEST_METHOD_TIMEOUT_PROPERTY_NAME
Property name used to set the default timeout for all@Test
methods: "junit.jupiter.execution.timeout.test.method.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the@Test
method or on an enclosing test class.This property overrides the "junit.jupiter.execution.timeout.testable.method.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_TEST_TEMPLATE_METHOD_TIMEOUT_PROPERTY_NAME
@API(status=STABLE, since="5.9") static final String DEFAULT_TEST_TEMPLATE_METHOD_TIMEOUT_PROPERTY_NAMEProperty name used to set the default timeout for all@TestTemplate
methods: "junit.jupiter.execution.timeout.testtemplate.method.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the@TestTemplate
method or on an enclosing test class.This property overrides the "junit.jupiter.execution.timeout.testable.method.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_TEST_FACTORY_METHOD_TIMEOUT_PROPERTY_NAME
@API(status=STABLE, since="5.9") static final String DEFAULT_TEST_FACTORY_METHOD_TIMEOUT_PROPERTY_NAMEProperty name used to set the default timeout for all@TestFactory
methods: "junit.jupiter.execution.timeout.testfactory.method.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the@TestFactory
method or on an enclosing test class.This property overrides the "junit.jupiter.execution.timeout.testable.method.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_LIFECYCLE_METHOD_TIMEOUT_PROPERTY_NAME
Property name used to set the default timeout for all lifecycle methods: "junit.jupiter.execution.timeout.lifecycle.method.default".The value of this property will be used unless overridden by a more specific property or a
@Timeout
annotation present on the lifecycle method.This property overrides the "junit.jupiter.execution.timeout.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_BEFORE_ALL_METHOD_TIMEOUT_PROPERTY_NAME
@API(status=STABLE, since="5.9") static final String DEFAULT_BEFORE_ALL_METHOD_TIMEOUT_PROPERTY_NAMEProperty name used to set the default timeout for all@BeforeAll
methods: "junit.jupiter.execution.timeout.beforeall.method.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the@BeforeAll
method.This property overrides the "junit.jupiter.execution.timeout.lifecycle.method.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_BEFORE_EACH_METHOD_TIMEOUT_PROPERTY_NAME
@API(status=STABLE, since="5.9") static final String DEFAULT_BEFORE_EACH_METHOD_TIMEOUT_PROPERTY_NAMEProperty name used to set the default timeout for all@BeforeEach
methods: "junit.jupiter.execution.timeout.beforeeach.method.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the@BeforeEach
method.This property overrides the "junit.jupiter.execution.timeout.lifecycle.method.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_AFTER_EACH_METHOD_TIMEOUT_PROPERTY_NAME
@API(status=STABLE, since="5.9") static final String DEFAULT_AFTER_EACH_METHOD_TIMEOUT_PROPERTY_NAMEProperty name used to set the default timeout for all@AfterEach
methods: "junit.jupiter.execution.timeout.aftereach.method.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the@AfterEach
method.This property overrides the "junit.jupiter.execution.timeout.lifecycle.method.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
DEFAULT_AFTER_ALL_METHOD_TIMEOUT_PROPERTY_NAME
Property name used to set the default timeout for all@AfterAll
methods: "junit.jupiter.execution.timeout.afterall.method.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the@AfterAll
method.This property overrides the "junit.jupiter.execution.timeout.lifecycle.method.default" property.
Please refer to the class description for the definition of supported values.
- Since:
- 5.5
- See Also:
-
TIMEOUT_MODE_PROPERTY_NAME
Property name used to configure whether timeouts are applied to tests: "junit.jupiter.execution.timeout.mode".The value of this property will be used to toggle whether
@Timeout
is applied to tests.Supported timeout mode values:
enabled
: enables timeoutsdisabled
: disables timeoutsdisabled_on_debug
: disables timeouts while debugging
If not specified, the default is
enabled
.- Since:
- 5.6
- See Also:
-
DEFAULT_TIMEOUT_THREAD_MODE_PROPERTY_NAME
@API(status=EXPERIMENTAL, since="5.9") static final String DEFAULT_TIMEOUT_THREAD_MODE_PROPERTY_NAMEProperty name used to set the default thread mode for all testable and lifecycle methods: "junit.jupiter.execution.timeout.thread.mode.default".The value of this property will be used unless overridden by a
@Timeout
annotation present on the method or on an enclosing test class (for testable methods).The supported values are
SAME_THREAD
orSEPARATE_THREAD
, if none is providedSAME_THREAD
is used as default.- Since:
- 5.9
- See Also:
-
-
Element Details
-
value
long valueThe duration of this timeout.- Returns:
- timeout duration; must be a positive number
-
unit
TimeUnit unitThe time unit of this timeout.- Returns:
- time unit
- See Also:
- Default:
SECONDS
-
threadMode
The thread mode of this timeout.- Returns:
- thread mode
- Since:
- 5.9
- See Also:
- Default:
INFERRED
-