我们正在使用Mock-Factory为我们的开发人员提供关于模拟功能的最大舒适度,以及对mockito本身不太可能需要的专业知识.
为此,我们的Mock-Factory提供了一个方法来创建一个模拟给定类名,方法名(通过regexp)和给定的返回值,它看起来如下(清楚这个问题的相关部分) ):
public T getMockForMethod(Class 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;
}
正如您所见,方法名称与名称(regexp)和正确的给定返回类型匹配.
它工作正常,但我有点困扰的事实是我必须建立人工参数数组参数!
不,这种方法
Mockito.when (m.invoke (mockForService, Mockito.anyVararg ())).thenReturn(methodResponse);
没用!
但我真的不明白为什么!?
任何人都可以给我上述代码的原因或更好的替代方案吗?