[英]Testing Thread.sleep with PowerMock not working
为简化起见,我试图验证使用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的兼容性和版本控制遇到很多麻烦,因此放弃了。 事实上,您应该避免编写需要模拟的静态方法以进行测试。 您应该编写它,使其不依赖于程序的状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.