質問

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

だから私は何が起こっているかを示すスニペットを与えます。

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

今、私は私のコードが使用しているものであるため、クラスをモックしようとしています。模擬は正常に生成されますが、そうするような期待を追加すると:

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

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

java.lang.illegalStateException:前のメソッドの動作定義の欠落org.easymock.internal.mockinvocationhandler.invoke(mockinvocationhandler.java:43)at org.powermock.api.easymock.internal.introlol octrol easymethockmethodinvococonololololololy contuloconolololyconolololy (EasyMockMethodInvocationControl.Java:95)at org.powermock.core.mockgateway.domethodcall(mockgateway.java:104)at org.powermock.core.mockgateway.methodcall(mockgateway.java:167) ))

私が欠けているものについて何か考えはありますか?詳細を含めていないことは知っていますが、表記法を使用してテスト用のクラスを準備しました。また、リプレイを1か所に置いて、期待を設定する前にモッククラッサを間違った状態に誤って置いていないことを確認しました。

役に立ちましたか?

解決 2

私が得ていた例外は、クラスの拡張に関係するものではなく、期待不良の結果でした。誤った質問でごめんなさい。

他のヒント

私はこのようなことをしましたが、それは私のために働きますが、なぜここで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;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top