В отсутствие фиктивного фреймворка java.lang.reflect.Proxy - ваш лучший выбор. Если вы никогда не использовали его ранее, вы можете создать динамический объект, который реализует набор интерфейсов, и вы используете InvocationHandler, чтобы проверить каждый вызов метода и решить, что делать. Это очень мощный метод (не ограничивающийся тестированием), поскольку вы можете делегировать вызовы методов другим объектам и т. Д. Он также изолирует вас от определенных изменений интерфейса, когда вы выполняете такое делегирование, поскольку объявить каждый метод. Он адаптируется к интерфейсу на рунтине.
public static interface MyIntf {
String foo(String arg1);
}
InvocationHandler invocationHandler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("foo") &&
method.getParameterTypes().length == 1 &&
method.getParameterTypes()[0] == String.class) {
// do your mocking here. For now i'll just return the input
return args[0];
}
else {
return null;
}
}
};
MyIntf myintf = (MyIntf) Proxy.newProxyInstance(getClass().getClassLoader(),
new Class[] { MyIntf.class },
invocationHandler);
System.out.println(myintf.foo("abc"));