gpt4 book ai didi

java - Powermockito 在模拟静态无效时不会抛出异常

转载 作者:行者123 更新时间:2023-12-04 05:20:52 29 4
gpt4 key购买 nike

我正在尝试模拟静态方法 Thread.sleep(1);在调用时返回 InterruptedException。我发现了一个似乎解决了我的问题的 SO 问题,但是在将我的代码设置为与该问题的答案相同后,它仍然无法正常工作。

我发现的 SO 问题是:How to mock a void static method to throw exception with Powermock?

这是我尝试测试的方法的片段:

try {
Thread.sleep(1);
} catch (InterruptedException ie) {
LOGGER.error("failure to sleep thread for 1 millisecond when persisting
checkpoint. exception is: " + ie.getMessage());
}

这是我的测试类中的一个片段,它显示了我尝试模拟 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 ,而是刚刚完成了模拟设置:

    @Test
public void test() throws InterruptedException {

PowerMockito.mockStatic(Thread.class);
PowerMockito.doThrow(new InterruptedException()).when(Thread.class);
Thread.sleep(1); //This is still setting up the mock, not actually invoking the method.
}

请注意上面所说的内容:“除非我使用相同的参数对 Adder.add() 进行两次调用,否则不会抛出模拟的 IOException。”后来,“实际上上面的 Adder.add(12) 是设置模拟静态方法的一部分”。

您可能应该使用像 anyInt() 这样的匹配器在对 Thread.sleep 的第一次“调用”中,然后继续执行测试。

关于java - Powermockito 在模拟静态无效时不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13711087/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com