2015-09-23 23 views
18

私はPowerMockを使用していますが、子クラスのすべての動作を保持する方法を知りたいですが、スタブsuperの呼び出しは子によってオーバーライドされる可能性があります。PowerMock:親クラスのスタブメソッド

は、私はこのクラスを持っていると言う:

public class A { 
    public String someMethod() { 
     return "I don't want to see this value"; 
    } 
} 

とサブクラス:

public class B extends A { 
    @Override 
    public String someMethod() { 
     return super.someMethod() + ", but I want to see this one"; 
    } 
} 

私はsuper.someMethod()への呼び出しをスタブはどうすればよいですか?

私は

@Test 
public void test() { 
    B spy = PowerMockito.spy(new B()); 
    PowerMockito.doReturn("value").when((A)spy).someMethod(); 

    assertEquals("value, but I want to see this one", spi.someMethod()); 
} 
+0

現在のテストケースではどうなっていますか? – Keith

+0

サブクラスのメソッドをスタブしています。 – jchitel

+1

このバグのようなものです:https://github.com/jayway/powermock/issues/487 – javaPlease42

答えて

1

を試してみたあなたがしようとしているキャストは、あなたが期待していると仕事に行くされていません。しかし、これを回避するには、PowerMockitoを使用して、いくつかの選択肢があると思います。

このStackOverflow answerをご覧ください。あなたは親クラスのメソッドを抑制しようとすることができ

+1

そうです、私はPowerMockのポイントはあなたがそれをテスト可能にするためのコードの構造。しかし、テストを書くのにかかる時間と労力のバランスをとる必要があることに気づいたので、テストを簡単にするようにコードを修正しました。しかし、リソースのおかげで! – jchitel

1

PowerMockito.suppress(methodsDeclaredIn(A.class)); 

はここで、スタブ抑制し、いくつかの使用であるかもしれないPowerMockに置き換えに関する記事です。

https://www.jayway.com/2013/03/05/beyond-mocking-with-powermock/

+0

'suppress'メソッドは参考にしてください。私は嘲笑された値を返す必要があるからです。ありがとう、結構です。 – javaPlease42

+0

PowerMockito.replace()を使用して親メソッドをあなたのモックされた値を返すものに置き換えるのはどうですか? – Steve

2

テストクラスに@PrepareForTest({ParentClassToSupress.class})を追加することを忘れないでください。それでは、スティーブが親のメソッドを提案して抑制するようにしてください:PowerMockito.suppress(methodsDeclaredIn(ParentClassToSupress.class));

関連する問題