Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用PowerMock避免wait()方法时发生IllegalMonitorStateException_Java_Tdd_Mockito_Powermock - Fatal编程技术网

Java 使用PowerMock避免wait()方法时发生IllegalMonitorStateException

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

我试图使用PowerMock避免
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加载文件。您需要在问题中提供示例代码,为其他人重现问题。