How to call Mockito.given with private method
我找到了使用ReflectionUtils的方法
1 |
现在我想驱动此方法返回指定的值。 通常,如果
1 | given(myMockClass.myMethod(myArg)).willReturn(5) |
但有没有可能用私人myMethod做到这一点?
当我打电话的时候
1 | given(myMethod.invoke(myClass, myArg)).willReturn(5) |
我有java.lang.reflect.InvocationTargetException。
我读过关于PowerMock的内容,但我想知道是否只有Mockito才有可能
编辑:
1 2 3 4 5 6 7 8 | public int A(args){ int retValue; ... some code here, the most important part retValue=.. if(some case) retValue= myMethod(args); return retValue; } |
考虑在这里使用Guava的
例如,如果您的原始方法是:
1 2 3 4 | private int calculateMyInt() { // do stuff return 0; } |
你的新方法是:
1 2 3 4 5 | @VisibleForTesting // package-private to call from test class. int calculateMyInt() { // do stuff return 0; } |
不要犹豫,将方法可见性更改为包受保护,即使它仅用于测试目的(通常是因为您要测试方法或因为您想要模拟它)。 你应该清楚地指出这个事实,一个好方法是使用注释(见这个答案)。
我建议你不要这样做。
如果您需要模拟私有方法的行为,那么您的设计就会出现问题。 你的课程不可测试。
解决方法是将您的方法包设为私有,并在同一个包中进行测试。 这将有效,但也不被视为良好做法。
我建议阅读这篇最新的Uncle's bob文章