是否可以以通用方式拦截模拟的所有方法调用?
例
给予供应商提供的类,如:
public class VendorObject {
public int someIntMethod() {
// ...
}
public String someStringMethod() {
// ...
}
}
我想创建一个模拟器,将所有方法调用重定向到具有匹配方法签名的另一个类:
public class RedirectedToObject {
public int someIntMethod() {
// Accepts re-direct
}
}
Mockito中的when()。thenAnswer()结构似乎符合账单,但我找不到一种方法来匹配任何方法调用与任何args。 InvocationOnMock肯定会给我所有这些细节。有没有一个通用的方式来做到这一点?看起来像这样的东西,何时(vo。*)被替换为适当的代码:
VendorObject vo = mock(VendorObject.class);
when(vo.anyMethod(anyArgs)).thenAnswer(
new Answer() {
@Override
public Object answer(InvocationOnMock invocation) {
// 1. Check if method exists on RedirectToObject.
// 2a. If it does, call the method with the args and return the result.
// 2b. If it does not, throw an exception to fail the unit test.
}
}
);
在供应商类周围添加包装器来使嘲笑变得容易不是一个选择,因为:
>现有的代码库太大了。
>极具性能关键应用的一部分。