0

PowerMockを使用してサードパーティのコードをモックしようとしていますが、拡張メソッドに問題があります。

そこで、何が起こっているのかを示すスニペットを提供します。

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

今、私はClassAをモックしようとしています。それは、私のコードが使用しているものだからです。モックはうまく作成されますが、次のような期待を追加すると、次のようになります。

expect(mockClassA.methodA()).andReturn("string");

次のエラーが発生します。

java.lang.IllegalStateException:org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invokeのorg.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43)で前のメソッド呼び出しmethodA()の動作定義がありません(EasyMockMethodInvocationControl.java:95)at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:104)at org.powermock.core.MockGateway.methodCall(MockGateway.java:167)at .ClassC.methodA(ClassC.java )。

私が欠けているものについて何か考えはありますか?あまり詳細を含めていないことはわかっていますが、表記を使用してテスト用にClassAを準備しました。また、期待値を設定する前に、mockClassAを誤って間違った状態にしないように、リプレイを1か所に配置しました。

4

2 に答える 2

0

私が得ていた例外は、クラス拡張に関係するものではなく、期待の低さの結果でした。間違った質問で申し訳ありません。

于 2012-08-10T20:09:47.193 に答える
0

私はこのようなことをしましたが、私にとってはうまくいきますが、ここでPowerMockが必要な理由がわかりません(EasyMock/Mockitoを使用しなくても実行できます)。

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassA.class)
public class ClassATest {
    @Test
    public void finalMethodString() throws Exception {
        ClassA f = PowerMock.createNiceMock(ClassA.class);
        EasyMock.expect(f.methodA()).andReturn("haha");
        EasyMock.replay(f);
        assertEquals("haha1", f.methodA());
    }
}


class ClassA extends ClassB{
    @Override
    String methodA() {
        return "1";
    }
}
class ClassB extends ClassC{
    @Override
    String methodA() {
        return "b";
    }
}
class ClassC {
    String methodA() {
        return null;
    }
}
于 2011-01-04T13:02:18.523 に答える