Насколько мне известно,
DBUnit не предоставляет набор результатов, хотя он хорошо поможет вам заполнить базу данных в памяти.
Я бы сказал, что насмешливая основа - это неправильный подход на данном этапе. Насмешка связана с тестированием поведения и взаимодействия, а не просто с возвратом данных, поэтому, скорее всего, они вам мешают.
Вместо этого я бы либо реализовал интерфейс набора результатов, либо создал бы динамический прокси-интерфейс интерфейса набора результатов для класса, который реализует методы, которые вам нужны, без необходимости реализации всего набора результатов. Скорее всего, вы обнаружите, что поддерживать класс так же просто, как поддерживать базу данных в памяти (при условии, что тестируемый набор данных является согласованным), и, вероятно, его проще отлаживать.
Вы можете создать резервную копию этого класса с помощью DBUnit, где вы сделаете снимок своего результирующего набора с помощью dbunit и попросите dbunit прочитать его обратно во время теста из xml, а ваш фиктивный результирующий набор прочитает данные из классов dbunit. Это был бы разумный подход, если бы данные были слегка сложными.
Я бы пошел в базу данных в памяти, если бы классы были настолько связаны, что им нужно было читать данные, которые были изменены в рамках одного и того же теста. Даже тогда я хотел бы использовать копию реальной базы данных, пока вам не удастся разделить эту зависимость.
Простой метод генерации прокси:
private static class SimpleInvocationHandler implements InvocationHandler {
private Object invokee;
public SimpleInvocationHandler(Object invokee) {
this.invokee = invokee;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
method = invokee.getClass().getMethod(method.getName(), method.getParameterTypes());
if (!method.isAccessible()) {
method.setAccessible(true);
}
try {
return method.invoke(invokee, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
}
}
}
public static <T> T generateProxy(Object realObject, Class... interfaces) {
return (T) Proxy.newProxyInstance(realObject.getClass().getClassLoader(), interfaces, new SimpleInvocationHandler(realObject));
}