gpt4 book ai didi

java - 使用 PowerMock 测试 Thread.sleep 不起作用

转载 作者:行者123 更新时间:2023-12-02 02:57:46 30 4
gpt4 key购买 nike

为了简化事情,我尝试使用 PowerMock 验证下面的方法中是否调用了 Thread.sleep()。

public class Sleeper {
public void sleep() throws Exception {
Thread.sleep(10);
}
}

测试类

public class SleeperTest {

// Mock setup done here to mock Sleeper instance

@Test
public void testSleep throws Exception {
PowerMockito.mockStatic(Thread.class);
sleeper.sleep();
PowerMockito.verifyStatic();
Thread.sleep(Mockito.anyLong());
}

}

我觉得这就是我应该做的让它工作,但当我尝试运行它时出现以下错误。

Wanted but not invoked java.lang.Thread.sleep(0);
Actually, there were zero interactions with this mock.

版本

 testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.6.2'
testCompile group: 'org.powermock', name: 'powermock-api-mockito', version: '1.6.6'

有趣的是,如果在测试方法中调用 Thread.sleep,则测试通过。

// This works
@Test
public void testSleep() throws Exception
{
PowerMockito.mockStatic(Thread.class);
Thread.sleep(Mockito.anyLong());
PowerMockito.verifyStatic();
Thread.sleep(Mockito.anyLong());
}

关于我可能做错了什么有什么想法吗?提前致谢。

最佳答案

您是否注释了您的测试类以使用 PowerMock 运行静态模拟?您应该这样注释它:

@PrepareForTest(Sleeper.class)
@RunWith(PowerMockRunner.class)
public class SleeperTest {

// Mock setup done here to mock Sleeper instance

@Test
public void testSleep throws Exception {
PowerMockito.mockStatic(Thread.class);
sleeper.sleep();
PowerMockito.verifyStatic();
Thread.sleep(Mockito.anyLong());
}

}

请尝试一下这个设置...我已经尝试复制您的代码,但在 PowerMock 的兼容性和版本控制方面遇到了很多麻烦,并放弃了。事实上,您应该避免编写需要模拟测试的静态方法。您应该这样编写它,使其不依赖于程序的状态。

关于java - 使用 PowerMock 测试 Thread.sleep 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066617/

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