我使用ReflectionUtils找到了我的方法
Method myMethod=ReflectionUtils.findMethod(myMockClass.getClass(), "myMethod", myArg.class)
现在我想驱动此方法返回指定的值。通常,如果myMethod
是公开的,我会写例如
given(myMockClass.myMethod(myArg)).willReturn(5)
但是有没有可能用私人myMethod来做呢? 我打电话的时候
given(myMethod.invoke(myClass, myArg)).willReturn(5)
我有java.lang.reflect.InvocationTargetException。 我已经阅读过关于PowerMock的内容,但我想知道是否只有Mockito可以
编辑:
public int A(args){
int retValue;
... some code here, the most important part
retValue=..
if(some case)
retValue= myMethod(args);
return retValue;
}
答案 0 :(得分:2)
请考虑在此处使用Guava's @VisibleForTesting
注释。基本上,只需将方法的可见性提高到测试它所需的最低水平。
例如,如果您的原始方法是:
private int calculateMyInt() {
// do stuff
return 0;
}
您的新方法是:
@VisibleForTesting // package-private to call from test class.
int calculateMyInt() {
// do stuff
return 0;
}
答案 1 :(得分:1)
我建议你不要这样做。 如果您需要模拟私有方法的行为,那么您的设计就会出现问题。你的课程不可测试。
解决方法是将您的方法包设为私有,并在同一个包中进行测试。这可行,但也不被视为良好做法。
我建议您阅读最新的Uncle's bob article
答案 2 :(得分:1)