在JUnit 5中,如果执行时间超过给定的持续时间,我们可以使用@Timeout
使测试失败。
PS已通过JUnit 5.5.2测试
1. @超时
TimeOutExample1.java
package com.mkyong.timeout;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import java.util.concurrent.TimeUnit;
public class TimeOutExample1 {
// timed out after 5 seconds
@BeforeEach
@Timeout(5)
void setUpDB() throws InterruptedException {
//TimeUnit.SECONDS.sleep(10);
}
// timed out after 500 miliseconds
@Test
@Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
void test_this() {
}
}
2. assertTimeout
2.1我们还可以使用assertTimeout
来使测试超时。
TimeOutExample2.java
package com.mkyong.timeout;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.assertTimeout;
public class TimeOutExample2 {
// timed out after 5 seconds
@Test
void test_timeout_fail() {
// assertTimeout(Duration.ofSeconds(5), () -> delaySecond(10)); // this will fail
assertTimeout(Duration.ofSeconds(5), () -> delaySecond(1)); // pass
}
void delaySecond(int second) {
try {
TimeUnit.SECONDS.sleep(second);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
下载源代码
$ git clone https://github.com/mkyong/junit-examples
$ cd junit5-examples
$检查src / test / java / com / mkyong / timeout / *。java