web-dev-qa-db-ja.com

PowerMock:親クラスのスタブメソッド

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

このクラスがあるとしましょう:

_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());
}
_
19
jchitel

Parentクラスのメソッドを抑制してみてください。

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

以下は、PowerMockのスタブ化、抑制、および置き換えに関する記事で、役立つかもしれません。

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

3
Steve

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

2
DustinB

あなたがしようとしているキャストは、期待通りに機能しません。しかし、私はあなたがこれを回避するためのいくつかのオプションを持っていると思います、確かにPowerMockitoで。

これを見てください StackOverflowの回答

1
Keith