据我所知,DBUnit不会显示结果集,尽管它可以帮助您填充内存数据库。
我想说的是,在这一点上,嘲弄框架是错误的方法。嘲笑是关于测试行为和交互,而不仅仅是返回数据,所以它可能会妨碍你。
相反,我要么实现结果集接口,要么创建结果集接口的动态代理到一个类,该类实现您关心的方法而无需实现整个结果集。您可能会发现维护类与维护内存数据库一样简单(前提是所测试的数据集是一致的),并且可能更容易调试。
您可以使用 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));
}