考虑这个测试类,如果运行main方法,该过程将在5分钟内完成,如果运行测试则立即成功。是否有任何建议的方法来验证Executor
行为?我希望测试也不会在5分钟内完成。
我遇到的具体问题是,创建ScheduledExecutorService
到Executors.html#newScheduledThreadPool(int),安排未来然后取消该未来不会终止基础Executor
作为默认RemoveOnCancelPolicy是等待在终止之前安排取消的未来。我正在通过暴露正在使用的ScheduledThreadPoolExecutor
来解决这个问题,但我更愿意将其封装在我的实现中。
public class TestExecutor {
@Test public void executorThatIsNotShutdown() {
main(null);
}
public static void main(final String[] args) {
final ScheduledExecutorService ex = Executors.newScheduledThreadPool(1);
ex.schedule(new Runnable() {
@Override
public void run() {
}
}, 5, TimeUnit.MINUTES);
ex.shutdown();
System.out.println(ex.toString());
}
}
答案 0 :(得分:2)
在测试方法中提交/安排任务后尝试使用此代码:
executorService.shutdown();
executorService.awaitTermination(5, TimeUnit.MINUTES);
因此测试线程将被阻止,直到所有任务都完成执行或发生超时
答案 1 :(得分:0)
您需要添加以下代码以使主线程等待一段时间,直到您的Executorsthread完成其操作
public static void main(final String[] args) {
final ScheduledExecutorService ex = Executors.newScheduledThreadPool(1);
ex.schedule(new Runnable() {
@Override
public void run() {
}
}, 5, TimeUnit.MINUTES);
System.out.println(ex.toString());
Thread.sleep('enter the time duration , so that your executor will finish its operation');
}
编辑: - 你可以尝试替代方式。 我有同样的问题,我在实际的测试方法之前放了thread.sleep()
@Before (method)
Thread.sleep(mill secs);