对于公共方法调用,EasyMock 的 capture() 允许您拦截和检查传递给方法的参数。对于私有方法调用,PowerMock 的 expectPrivate 允许您模拟私有方法调用。
有没有办法以某种方式组合这些并将参数传递给私有方法调用?例子:
public class Program
{
public FancyReturnType PublicMethod()
{
ArbitraryType localInstance = new ArbitraryType();
localInstance.setFoo(somePrivateHelperMethod());
localInstance.setBar(increasinglyComplexMagic());
long aLongValue = 11235L;
// more variables, more work
SomeType worker = privateHelperToIntercept(localInstance, aLongValue, otherVariables);
if (worker.something)
{
return retVal.aFancyReturnType;
}
else
{
return retVal.anotherFancyReturnType;
}
}
}
在这种情况下,我想检查调用localInstance
消耗的对象privateHelperToIntercept()
。
我找到了很多模拟私有方法调用的例子;PowerMock 的expectPrivate(partiallyMockedObject, "nameOfPrivateMethod", arg1, arg2)
效果很好。我还找到了拦截传递给公共方法调用的参数的示例;Capture<Type> myTestCapture = new Capture<Type>()
结合someMockedObject.PublicMethod(capture(myTestCapture))
.
不幸的是,我既不能让两者一起工作,也不能找到将它们结合起来的例子。有没有人看到这样做的方法?
FWIW,我怀疑 Mockito 可以做到这一点,但它不包含在我们的源/构建/测试系统中。如果可能,我想避免在我们的系统中支持新库的过程。