実現したいこと
親クラスのメソッドの戻り値を置き換えたい。
詳細
Javaにて、Mockito2.8.9+PowerMock1.7.1を利用して以下のようなクラスのテストコードを作成しています。
public class Parent { public int save() { return 99; } } public class Child extends Parent { public int save() { int i = super.save(); return i*2; } }
PowerMockitoのsuppressメソッドを以下のように利用することで、saveメソッドを無効化することまでは確認できています。
Method replaceMethod = Parent.class.getMethod("save"); PowerMockito.suppress(replaceMethod); new Child.save() // return=0
上記を踏まえて、親クラスのsaveメソッドをreplaceメソッドを利用して、以下のような形で置き換えを実行しようとしていますが上手く動作しません。
Method replaceMethod = Parent.class.getMethod("save"); replace(replaceMethod).with( new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("replaceMethod!!"); // not print return 1; } } ); new Child().save(); // return=198
いくつか情報サイトも確認してみましたが、どれも上手く行かない状況です。
上記のreplaceメソッドが正しく動く方法を教えてください。
なお、そもそも親クラスのメソッドを呼ぶような実装が悪いのはその通りなのですが、テスト対象のコードは変更できない状況なので、なんとか置き換えを行いたい状況です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/08 01:33 編集