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);
没能生效!但是我真的不明白为什么!?
有人可以告诉我原因或者更好的替代代码吗?