Можно ли перехватить все вызовы метода на макет в общем виде?
Пример
Учитывая класс, предоставленный поставщиком, например:
public class VendorObject {
public int someIntMethod() {
// ...
}
public String someStringMethod() {
// ...
}
}
Я хотел бы создать макет, который перенаправляет все вызовы методов в другой класс, где есть соответствующие сигнатуры методов:
public class RedirectedToObject {
public int someIntMethod() {
// Accepts re-direct
}
}
Когда(). thenAnswer() конструкция в Mockito, похоже, соответствует вектору, но я не могу найти способ сопоставить любой вызов метода с любыми аргументами. 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.
}
}
);
Добавление оберток вокруг классов поставщиков, чтобы сделать насмешливым легко, не является вариантом, потому что:
- Слишком большая существующая база кода.
- Часть критически важных приложений с высокой производительностью.