@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方法。PowerMock - IllegalStateException:必須重播類XXX以獲得配置期望
我得到錯誤「IllegalStateException:必須重放類XXX.class以獲取配置的期望值。
任何幫助表示讚賞。我對PowerMock和EasyMock仍然很陌生;因爲我需要使用expectNew(...)方法,所以我確保在測試方法中使用所有PowerMock API。
爲什麼它需要XXX.class,但不適用於其他情況? – kchang
@kchang,我真的不完全確定我明白爲什麼它需要它,我只知道它的工作原理,並且我在這個網站上找到了它的文檔[link](https://code.google.com/p/ powermock/wiki/MockConstructor)如果我不得不猜測爲什麼它是必需的,我假設它必須與PowerMock檢查'XXX'類的每個新實例的方式有關,以查看參數是否與預期相符,但這只是一個猜測。希望有所幫助。 – HardcoreBro