【发布时间】:2012-12-04 20:12:27
【问题描述】:
我正在尝试模拟静态方法 Thread.sleep(1);调用时返回 InterruptedException。我发现了一个似乎可以解决我的问题的 SO question,但是在将我的代码设置为与该问题的答案相同之后,它仍然无法正常工作。
我发现的 SO 问题是:How to mock a void static method to throw exception with Powermock?
这是我正在尝试测试的方法的 sn-p:
try {
Thread.sleep(1);
} catch (InterruptedException ie) {
LOGGER.error("failure to sleep thread for 1 millisecond when persisting
checkpoint. exception is: " + ie.getMessage());
}
这是我的测试类中的一个 sn-p,它显示了我尝试模拟 Thread.sleep(1) 来做我想做的事:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Thread.class)
public class TestCheckpointDaoNoSQL {
@Test
public void test() throws InterruptedException {
PowerMockito.mockStatic(Thread.class);
PowerMockito.doThrow(new InterruptedException()).when(Thread.class);
Thread.sleep(1);
}
}
我还尝试模拟 InterruptedException 来抛出而不是创建一个新异常,但这并没有帮助。我可以看出异常没有被抛出,因为 ECLEMMA 没有显示该部分方法的代码覆盖率,并且我通过该方法进行调试以验证标语永远不会被击中。
感谢您查看我的问题!
【问题讨论】:
-
您的代码看起来几乎与您发布的链接中问题中的代码完全相同。你有没有尝试过看起来像那个人想出的答案?
-
它看起来几乎和那个代码一模一样,因为我复制了他们的解决方案。我不确定它是否对我不起作用,因为我做了一些不同/错误的事情,或者它对 Thread.sleep 不起作用。
-
不要只是复制代码,阅读他们写的内容。我认为你错过了他们解决方案的背景。