JUnit测试与Timer无法正常工作

时间:2014-05-19 11:04:01

标签: java map timer 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测试中,我通过检查地图来检查这个延迟 在延迟到期之前仍然具有mapKey的值(我正在测试15000ms,所以我有足够的时间)。但是,当我执行此检查时,它会抛出一个异常,说无法找到mapKey。我也没有收到“从地图上删除”日志消息。

我已经通过在我的JUnit代码中添加Thread.sleep(20000)进行了测试,并且显示了由Timer线程查找的日志,但是如果计时器中的方法没有执行,则没有Thread.sleep(...),为什么它没有在地图中找到它?

有什么关于计时器JUnit不能很好地发挥作用吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为你的测试有点无用......你试图测试的是Timer类,你没有写过(不是吗?)。我猜这个课程很好......

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