2
@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);
}

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

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

任何帮助表示赞赏。我还是 PowerMock 和 EasyMock 的新手;因为我需要使用 expectNew(...) 方法,所以我确保在测试方法中使用所有 PowerMock api。

4

2 回答 2

3

您需要PowerMock.replay(XXX.class);在 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, XXX.class);
    Whitebox.invokeMethod(objInstance, "methodToBeTested");

    PowerMock.verify(mockInstance);
}
于 2013-04-22T17:50:39.593 回答
0

这可能是 PowerMock 中的一个未解决问题。

查看http://code.google.com/p/powermock/issues/detail?id=271&q=IllegalStateException了解更多详情。

于 2012-11-05T20:59:28.527 回答