Java 使用PowerMock避免wait()方法时发生IllegalMonitorStateException
我试图使用PowerMock避免Java 使用PowerMock避免wait()方法时发生IllegalMonitorStateException,java,tdd,mockito,powermock,Java,Tdd,Mockito,Powermock,我试图使用PowerMock避免wait()方法调用。我尝试了下面的代码,但没有成功(我成功了吗?)。有人能帮忙吗 @RunWith(PowerMockRunner.class) @PrepareForTest(Bar.class) public class MyTest { @Test public void test() throws InterruptedException{ Foo foo = new Foo(); Foo fooSpy
wait()
方法调用。我尝试了下面的代码,但没有成功(我成功了吗?)。有人能帮忙吗
@RunWith(PowerMockRunner.class)
@PrepareForTest(Bar.class)
public class MyTest {
@Test
public void test() throws InterruptedException{
Foo foo = new Foo();
Foo fooSpy = PowerMockito.spy(foo);
Bar barMock = PowerMockito.mock(Bar.class);
PowerMockito.doReturn(barMock).when(fooSpy).getBar();
PowerMockito.doNothing().when(barMock).wait();
fooSpy.makeBarWait();
}
}
public class Bar{}
public class Foo {
private Bar bar;
public Bar getBar() {
return bar;
}
public void makeBarWait() throws InterruptedException {
// do something...
synchronized (this) {
getBar().wait();
}
}
}
我猜仍在调用该方法,因为我遇到了以下错误:
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:503)
为我抛出一个NullPointerException。您需要对监视到的对象调用makeBarWait()
:
@Test
public void test() throws InterruptedException {
Foo foo = new Foo();
Foo fooSpy = PowerMockito.spy(foo);
Bar barMock = PowerMockito.mock(Bar.class);
PowerMockito.doReturn(barMock).when(fooSpy).getBar();
PowerMockito.doNothing().when(barMock).wait();
fooSpy.makeBarWait(); // <-----
}
@测试
public void test()引发InterruptedException{
Foo-Foo=新的Foo();
Foo fooSpy=PowerMockito.spy(Foo);
Bar-barMock=PowerMockito.mock(Bar.class);
doReturn(barMock).when(fooSpy.getBar();
PowerMockito.doNothing().when(barMock.wait();
fooSpy.makeBarWait();//@Duncan我已经编辑了上面的代码,因为我目前无法复制你的问题,我投票以“无法复制”结束这个问题原因。@Lucas PowerMock、Mockito和JUnit的哪个版本?1.6.0
和4.11
@Lucas在这里是一样的。我恐怕无法重现你的问题。你测试的代码和你在这里发布的完全一样吗?我刚刚为Bar
使用了一个完全空的类。这是项目@Lucas抱歉,我真的不想知道从Google Drive加载文件。您需要在问题中提供示例代码,为其他人重现问题。