2014-05-19 37 views
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不能很好地与计时器有关的问题?任何帮助都感激不尽。

+0

也许它不存在于地图中? 也:我会建议不要像代码: 赶上(例外五){// 捕获异常 } 是出错也不会解决你可能有任何问题,只是隐藏的一切。 – Stultuske

回答

0

我认为你的测试是没用的......你试图测试的是你没有写的Timer类(不是吗?)。我猜这个班的工作很好...

你应该专注于测试你自己的代码,它是业务逻辑。在这种情况下,你可以测试的是deleteFromMap方法。