0
我有一段代码执行一个计时器,然后在短暂的延迟(显然)后执行一个方法。我对这个模块的JUnit测试(端到端和集成测试通过很好)有点麻烦。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测试,我检查这个延迟通过检查地图 仍具有映射键的值,延时结束(我与15000ms测试之前,所以我有很多时间)。但是,当我执行此检查时,它会抛出一个异常,指出无法找到mapKey。我也没有收到“从地图上删除”日志消息。
我已经加入我的JUnit代码Thread.sleep(20000)
了测试,日志由计时器线程显示的发现,但如果在计时器的方法还没有被执行,而不Thread.sleep(...)
,为什么它没有找到它地图?
是否有关于JUnit不能很好地与计时器有关的问题?任何帮助都感激不尽。
也许它不存在于地图中? 也:我会建议不要像代码: 赶上(例外五){// 捕获异常 } 是出错也不会解决你可能有任何问题,只是隐藏的一切。 – Stultuske