java - PowerMock-IllegalStateException : Must replay Class XXX to get configured expectation

标签 java unit-testing junit powermock

@PrepareForTest({...,..., XXX.class})
...
@Test
public void testMethodToBeTested(){
    XXX mockInstance = PowerMock.createMock(XXX.class); 
    ...
    PowerMock.expectNew(XXX.class, p1, p2, p3, p4, p5).andReturn(mockInstance);
    mockInstance.methodWithNoReturnVal();
    expect(mockInstance.getSearchVal()).andReturn(1);
    PowerMock.replay(mockInstance);
    Whitebox.invokeMethod(objInstance, "methodToBeTested");

    PowerMock.verify(mockInstance);
}

本质上,我想测试一个私有(private)方法:methodToBeTested()。该方法实例化一个 XXX.class 类型的对象(使用 new 运算符)并将其存储到实例变量中;我 mock 这个对象。然后,它通过模拟调用 methodWithNoReturnVal(),然后调用我配置为返回 1 的 getter 方法。

我收到错误“IllegalStateException:必须重播类 XXX.class 才能获得配置的期望。”

感谢任何帮助。我对 PowerMock 和 EasyMock 还是新手;由于我需要使用 ExpectNew(...) 方法,因此我确保在测试方法中使用所有 PowerMock api。

最佳答案

在Powermock的方法中需要有一个PowerMock.replay(XXX.class);来拦截对象的构造。见下文。

@PrepareForTest({...,..., XXX.class})
...
@Test
public void testMethodToBeTested(){
    XXX mockInstance = PowerMock.createMock(XXX.class); 
    ...
    PowerMock.expectNew(XXX.class, p1, p2, p3, p4, p5).andReturn(mockInstance);
    mockInstance.methodWithNoReturnVal();
    expect(mockInstance.getSearchVal()).andReturn(1);
    PowerMock.replay(mockInstance, XXX.class);
    Whitebox.invokeMethod(objInstance, "methodToBeTested");

    PowerMock.verify(mockInstance);
}

关于java - PowerMock-IllegalStateException : Must replay Class XXX to get configured expectation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240186/

相关文章:

java - 选择 Android 中文件的保存位置

java - 检查 Java 1.6 中的文件夹是否可读

java - AssertEquals 2 列表忽略顺序

unit-testing - 本地化测试从命令行失败,但在 VS 中成功运行

python - 使用 py.test 以编程方式收集或创建测试

java - 如何查找静态函数被调用 Mockito 的次数

java - Android - 带有指向 WebView 指针的 Javascript 接口(interface) - 如何在没有 memleak 的情况下实现它

java - 模拟的restTemplate.postForObject未在执行测试时使用

java - 在多个线程中运行 Junit 测试。 Gatling 可以执行 JUnit 测试吗?

java - Java 中菱形运算符 (<>) 的意义何在?