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 を返すように構成したゲッター メソッドを呼び出します。

「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 に答える