我正在为DSL编写JUnit测试用例,我需要确保测试中的方法永远不会结束(如this question中所示)。
provided solution很好,但我想使用“new”Executor interface(Java 5.0以后):
@Test
public void methodDoesNotReturnFor5Seconds() throws Exception {
Thread t = new Thread(new Runnable() {
public void run() {
methodUnderTest();
}
});
t.start();
t.join(5000);
assertTrue(t.isAlive());
// possibly do something to shut down methodUnderTest
}
如何将上述代码从“旧”Thread
/ Runnable
界面翻译为“新”ExecutorService
/ Executor
界面?
答案 0 :(得分:1)
Future<?> future = Executors.newSingleThreadExecutor().submit(new Runnable() {
public void run() {
methodUnderTest();
}
});
try {
future.get(5, TimeUnit.SECONDS);
fail("The task has completed before 5 seconds");
}
catch (TimeoutException e) {
// expected
}