如何在JUnit中处理超时?

时间:2015-12-04 03:17:14

标签: java junit

说我有以下测试:

@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中实现的功能?