@Timeout is used to define a timeout for a method or all testable methods within one class and its @Nested classes.
Example
@Timeout(42)
@Timeout(value = 42, unit = MILLISECONDS)
Values 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. If you do not specify any unit, then it will be in 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) |
TimeoutTest.java
package com.sample.app;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
public class TimeoutTest {
@Timeout(value = 3, unit = TimeUnit.SECONDS)
@Test
void successTest() throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
}
@Timeout(value = 3, unit = TimeUnit.SECONDS)
@Test
void failTest() throws InterruptedException {
TimeUnit.SECONDS.sleep(20);
}
}
@Timeout(value = 3, unit = TimeUnit.SECONDS)
@Test
void failTest() throws InterruptedException {
TimeUnit.SECONDS.sleep(20);
}
As you see above snippet, I set the method ‘failTest’ to sleep for 20 seconds, but set the timeout for 3 seconds only. When this method unable to finish the test within 3 seconds, junit throws ‘TimeoutException’ and do not wait for 20 seconds.
java.util.concurrent.TimeoutException: failTest() timed out after 3 seconds
at org.junit.jupiter.engine.extension.TimeoutInvocation.createTimeoutException(TimeoutInvocation.java:70)
at org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:59)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
You can download all the applications from this link.
https://github.com/harikrishna553/junit5/tree/master/junit5-examples
Previous Next Home
No comments:
Post a Comment