如何使用JMockit模拟Thread.sleep()?

时间:2011-08-16 21:08:45

标签: static-methods junit4 jmockit

我有以下代码:

class Sleeper {
    public void sleep(long duration) {
        try {
            Thread.sleep(duration);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

如果Thread.sleep()抛出InterruptedException,如何使用JMockit测试Thread.currentThread()。interrupt()?

2 个答案:

答案 0 :(得分:3)

有趣的问题。测试有点棘手,因为模拟java.lang.Thread的某些方法会干扰JRE或JMockit本身,并且因为JMockit(当前)无法动态模拟本机方法,例如{{1 }}。也就是说,它仍然可以完成:

sleep

答案 1 :(得分:0)

从JMockit 1.43开始,这是不可能的

JMockit 1.43添加了this commit,它检查您是否要模拟线程并将其列入黑名单。现在您将获得此异常:

  

java.lang.IllegalArgumentException:java.lang.Thread是不可模拟的