Могу ли я автоматически делегировать все вызовы методам другого экземпляра, которые используют один и тот же интерфейс?
У меня большой класс (я хочу проверить), например:
class MyClassUnderTest implements SomeInterface {
public void anImportantMethod() {
}
@Override
public void fromTheInterface() {
}
@Override
public void fromTheInterface2() {
}
private void utilFunc() {}
}
Реализует интерфейс
interface SomeInterface {
void fromTheInterface();
void fromTheInterface2();
}
Учитывая, что во время unittest я хочу «скрыть» методы, унаследованные от интерфейса с различными реализациями. Для этого я написал служебный класс
class DebugSomeInterface implements SomeInterface {
@Override public void fromTheInterface() { log.debug("1"); }
@Override public void fromTheInterface2() { log.debug("2"); };
}
Теперь мне нужно «делегировать» все возможные вызовы этой реализации. Я делаю это вручную, производя от MyClassUnderTest
моего собственного класса, делегируя все вызовы этому:
class MyClassUnderTest_Mock extends MyClassUnderTest {
DebugSomeInterface delegated = new DebugSomeInterface();
@Override public void fromTheInterface() {
delegated.fromTheInterface();
}
@Override public void fromTheInterface2() {
delegated.fromTheInterface2();
};
Только у меня есть много классов, реализующих SomeInterface
, и делать это вручную утомительно и подвержено ошибкам.
Я бы хотел (наполовину) автоматизированный способ создания MyClassUnderTest_Mock
экземпляров, как mock(...)
с помощью Mockito. Может быть, что-то вроде
MyClassUnderTest underTest = new MyClassUnderTest();
DebugSomeInterface delegated = new DebugSomeInterface();
MyClassUnderTest instance = mixin(underTest, SomeInterface.class, delegated);
Возможно, это создаст «прокси» instance
, который делегирует все вызовы методов от SomeInterface
до delegated
, а остальные underTest
.
В ядре Java есть некоторый механизм с прокси-объектами, но я не могу собрать все это вместе.