据我所知,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));}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)