2010-11-30 12 views
0

PowerMockを使用して第三者のコードをモックしようとしていますが、拡張メソッドで問題が発生しています。拡張メソッドを使用したPowerMockの問題

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

ClassA extends ClassB{ 
    super(); 
} 

ClassB extends ClassC{ 
    super(); 
} 

ClassC { 
    String methodA(); 
} 

私はClassAを模擬しようとしていますが、これは私のコードが使用しているものです。私はそうのような期待を追加しかしときモックは、罰金を作成:

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

私は次のエラーを取得する:

java.lang.IllegalStateException: missing behavior definition for the preceding method call methodA() at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43) at org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke(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か所に置いています。

答えて

0

私が例外になっていたのは、クラス拡張とは関係がなく、期待が乏しいという結果でした。間違って述べられた質問を申し訳ありません。

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; 
    } 
} 
+0

私はpowermock.version = 1.4.6、easymockclassextension = 3.0を使用します。 – IAdapter

関連する問題