我有几个junit测试用例,其中我在调用方法doComplexOperation()
,该方法启动一个新线程并在每个循环中以100ms的睡眠打印0-5。
当我分别运行每种测试方法时,它们都会产生不同的结果:
在所有这些测试中,主线程不等待在doComplexOperation
中创建的线程完成。我期望在运行main()
方法或@Tests
JUnit上是否有配置,以便我可以将所有这些测试打印为0-4?
import org.junit.jupiter.api.Test;
class Tests {
public static void main(String[] args) {
doComplexOperation();
}
@Test
void test1() {
doComplexOperation(); //Prints 0 OR doesn't print anything at all
}
@Test
void test2() {
doComplexOperation(); //Prints 0 - 3
sleep(300);
}
@Test
void test3() {
doComplexOperation(); //Prints 0 - 4
sleep(1000);
}
static void doComplexOperation() {
new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "-" + i);
sleep(100);
}
}).start();
}
static void sleep(int ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}