用数据填充ResultSet的简单方法

用数据填充ResultSet的简单方法,第1张

数据填充ResultSet的简单方法

据我所知,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));}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5429821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存