【发布时间】:2016-06-25 23:48:30
【问题描述】:
我已经使用 TimerTask 和 Timer.schedule 实现了一个在一定时间后执行一些逻辑的方法。 我想使用 Junit 验证这种行为,但是,我想知道是否有更好的方法来测试它,而不使用线程休眠或测量时间。
谢谢。
【问题讨论】:
-
如果不测量时间,就无法测试时间安排是否正确。
-
不是直接答案,但您应该考虑在新代码中使用
java.util.concurrent.ScheduledExecutorService而不是java.util.Timer。另请参阅此问题:stackoverflow.com/questions/2213109/… -
当然可以在不启动线程或等待的情况下编写调度代码测试。相反,您可以模拟或伪造依赖项。真正的问题是你测量的时间相对于什么——基本上,如果任务立即执行,你的测试怎么知道会失败?把它假装出来,你就有了解决问题的办法。
-
谢谢@DanielPryden,这很鼓舞人心,我会探索这个解决方案
-
如果您需要从 Timer 或 ExecutorService 线程执行断言,请查看ConcurrentUnit。
标签: java multithreading junit timer