说我有以下测试:
@Test(timeout = 1)
public void test(){
while(true){}
}
这模拟了一个需要很长时间才能返回的测试,而不是来自睡眠,而是来自原始计算时间。测试如何退出?如果我创建一个线程并尝试相同的东西,它就不会编译。
public static void main(String[] args) {
Thread thread = new Thread() {
public void run() {
try {
while (true) {
}
} catch (InterruptedException e) {//Exception 'java.lang.InterruptedException' is never thrown in the corresponding try block'
e.printStackTrace();
}
}
};
thread.start();
thread.interrupt();
}
我甚至可以尝试复制实现,但它仍然不会中断线程:
public static void main(String[] args) {
Thread thread = new Thread() {
public void run() {
try {
doTest();
} catch (InterruptedException throwable) {
System.out.println("interrupted");
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
private void doTest() throws Throwable {
while (true) {
}
}
};
thread.start();
thread.interrupt();
}
java.lang.Exception: test timed out after 1 milliseconds
异常声称在运行常规测试时会从while循环中发起strait。
我对测试是如何被中断感到困惑,但我不能对常规线程做同样的事情。这是怎么打扰的?'在JUnit中实现的功能?