我有一段执行计时器的代码,然后在很短的时间后执行一个方法(显然)。对于这个模块,我在JUnit测试(端到端和集成测试通过正常)方面有点麻烦。
这是计时器代码:
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
LOGGER.debug("Deleting from the map");
deleteFromMap(mapKey); // This method actually deletes "mapKey" from the map
} catch (Exception e) {
// Catch the exception
}
}
}, delay); // "delay" is passing into the method
所以在我的JUnit测试中,我通过检查地图来检查这个延迟 在延迟到期之前仍然具有mapKey的值(我正在测试15000ms,所以我有足够的时间)。但是,当我执行此检查时,它会抛出一个异常,说无法找到mapKey。我也没有收到“从地图上删除”日志消息。
我已经通过在我的JUnit代码中添加Thread.sleep(20000)
进行了测试,并且显示了由Timer线程查找的日志,但是如果计时器中的方法没有执行,则没有Thread.sleep(...)
,为什么它没有在地图中找到它?
有什么关于计时器JUnit不能很好地发挥作用吗?任何帮助将不胜感激。
答案 0 :(得分:0)
我认为你的测试有点无用......你试图测试的是Timer类,你没有写过(不是吗?)。我猜这个课程很好......
您应该专注于测试自己的代码及其业务逻辑。在这种情况下,您可以测试的是deleteFromMap方法。