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;
}
Mockito.when (m.invoke (mockForService, Mockito.anyVararg ())).thenReturn(methodResponse);
有人能告诉我原因或上面代码的更好替代方案吗?
你不该这么做。Mockito是一个设计良好、易于学习、文档非常丰富、几乎是事实上的标准框架。而且它是类型安全的,不需要反射,这使得测试易于阅读和理解。
让您的开发人员学习真正的Mockito,并直接使用它的API。他们会很乐意使用它,因为它比您自己的超级API有更好、更容易使用和更灵活的设计,他们会知道他们不会白学Mockito,因为他们可能会在其他项目甚至其他工作中使用它。
Mockito不需要另一个专有API在它之上。因此,我建议的替代方案是忘记这一点,将Mockito教给您的开发人员。
我正在使用mockito并使用java6和Spring进行开发。
我一直在试图理解嘲笑是如何工作的。我读过各种回应,似乎有一个相互矛盾的论点,Mockito是否在内部使用反射。 这里,它清楚地说明了mockito不使用反射:https://stackoverflow.com/questions/15970810/using-mockito-to-mock-methods-by-reflection#:~:text=mockito%20is%20a%20realt
使用mockito模拟一个方法会确保永远不会调用被模拟的方法吗?我有一个主类,它包含一些我想为其编写单元测试的代码,还有一个单元测试类MainTest,它包含主类的单元测试。 eg: 源类: JUnit测试(使用mockito) 这项测试失败了。为什么?
我想在类AppleProcessor中测试一个方法: 请注意,Fruit是AppleFruit实现的方法的接口,并且还有一个方法。 我的测试看起来像: 然而,我得到了以下错误:
异常堆栈跟踪
问题内容: 我已经写了一家工厂来生产物体: 我想验证传递给的参数,但不知道如何模拟静态方法。我在测试用例中使用的是和。有没有模拟或验证此特定用例的好方法? 问题答案: 在Mockito上使用PowerMockito。 示例代码: