整数値のリストを受け取るプライベートメソッドがあり、整数値のリストを返します。パワーモックを使用してテストするにはどうすればよいですか? powermockは初めてですが、簡単なモックでテストを実行できますか?どうやって..
ドキュメント の「Common-Bypass encapsulation」というセクション:
Whitebox.invokeMethod(..)を使用して、インスタンスまたはクラスのプライベートメソッドを呼び出します。
また、同じセクションに例があります。
これを行う方法の完全な例を次に示します。
import Java.util.ArrayList;
import Java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.powermock.reflect.Whitebox;
class TestClass {
private List<Integer> methodCall(int num) {
System.out.println("Call methodCall num: " + num);
List<Integer> result = new ArrayList<>(num);
for (int i = 0; i < num; i++) {
result.add(new Integer(i));
}
return result;
}
}
@Test
public void testPrivateMethodCall() throws Exception {
int n = 10;
List result = Whitebox.invokeMethod(new TestClass(), "methodCall", n);
Assert.assertEquals(n, result.size());
}
Whitebox.invokeMethod(myClassToBeTestedInstance, "theMethodToTest", expectedFooValue);
Powermockitoでプライベートメソッドをテストする場合、このプライベートメソッドの構文は次のとおりです。
private int/void testmeMethod(CustomClass[] params){
....
}
あなたのテストクラスメソッドで:
CustomClass [] params = new CustomClass [] {...} WhiteboxImpl.invokeMethod(spy、 "testmeMethod"、params)
パラメータのために機能しません。その引数を持つtestmeMethodが存在しないというエラーメッセージが表示されます。
WhiteboxImplクラス
public static synchronized <T> T invokeMethod(Object tested, String methodToExecute, Object... arguments)
throws Exception {
return (T) doInvokeMethod(tested, null, methodToExecute, arguments);
}
Array型の引数の場合、PowerMockがめちゃくちゃになります。したがって、これをテストメソッドで次のように変更します。
WhiteboxImpl.invokeMethod(spy,"testmeMethod",(Object) params)
パラメータのないプライベートメソッドの場合、この問題はありません。私が覚えているように、それはタイプPrimitveタイプとラッパークラスのパラメーターに対して機能します。
「TDDの理解はソフトウェアエンジニアリングの理解です」