私たちは Mock-Factory を使用して、mockito 自体についての必要最小限のノウハウで、開発者にモッキング機能について最大限の快適さを提供しています。
そのために、私たちの Mock-Factory は、与えられたクラス名、メソッド名 (regexp による)、および次のように見える特定の戻り値 (この質問の関連部分までクリーンアップ) を指定してモックを作成するメソッドを提供しています。 ):
public <T> T getMockForMethod(Class<T> clazz, String methodName, Object methodResponse)
{
T mockForMethod = mock(clazz);
for (Method m : clazz.getDeclaredMethods ())
{
if (m.getName ().matches (methodName) &&
m.getReturnType ().isAssignableFrom (methodResponse.getClass ()))
{
try
{
Class<?>[] paramTypes = m.getParameterTypes ();
Object[] params = new Object[paramTypes.length];
for (Object o : params)
{
o = Mockito.anyObject ();
}
Mockito.when (m.invoke (mockForService, params)).thenReturn (methodResponse);
}
catch (IllegalArgumentException e)
{
e.printStackTrace (System.err);
}
catch (IllegalAccessException e)
{
e.printStackTrace (System.err);
}
catch (InvocationTargetException e)
{
e.printStackTrace (System.err);
}
}
}
return mockForMethod;
}
ご覧のとおり、メソッド名は名前 (正規表現) と正しい指定された戻り値の型で一致しています。
それは正常に動作しますが、私は人工パラメータ配列を構築しなければならないという事実に少し悩まされていますparams
! いいえ、アプローチ
Mockito.when (m.invoke (mockForService, Mockito.anyVararg ())).thenReturn(methodResponse);
うまくいきませんでした!でも、なぜだかよく分からない!?
上記のコードの理由またはより良い代替案を誰か教えてもらえますか?