使用场景:在Expectation中需要根据replay时的参数值决定返回值。
原理:JMockit拦截调用,转交给Delegate处理。
@Test
public void delegatingInvocationsToACustomDelegate(@Mocked final DependencyAbc anyAbc){
new Expectations() {{
anyAbc.intReturningMethod(anyInt, null);
result = new Delegate() {
int aDelegateMethod(int i, String s)
{
return i == 1 ? i : s.length();
}
};
}};
// Calls to "intReturningMethod(int, String)" will execute the delegate method above.
new UnitUnderTest().doSomething();
}
- delegate方法的参数应该与原始方法一致,返回值需要兼容或者为异常。
- 可以delegate构造器,这时返回值设置为空。
- delegate参数中可以有一个 Invocation对象,从而获得调用者的引用