我想模拟一个ResultSet。说真的
我正在重构一个大的复杂代码段,该代码段是从ResultSet中解析数据,并且我希望代码的行为相同。因此,我需要为要重构的部分编写一个单元测试,以便能够对此进行测试。
谷歌搜索后,我想出了两个想法:
第二种方法看起来更容易,也更受支持。
对于创建这样的模拟游戏,您有何建议?(当然,尽管有医生:-)?我
在眉毛上想
些银子吗?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));
}
问题内容: 我整天用谷歌搜索,没有运气。我按确定按钮后调用方法。所以代码是: 我的testResultSet()方法工作正常。现在,如何改变我的代码,以便它工作,或者什么是最简单的代码,以使DefaultTableModel从ResultSet?提前致谢。 编辑:我正在接收java.lang.IllegalStateException: SQLite JDBC: inconsistent inte
series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; $fileObject = new \Vtiful\Kernel\Excel($config); $fileObject = $fileObject->fileName('tutorial.xlsx'); $
factory 辅助函数 必须 使用 factory 方法来做数据填充,因为是框架提倡的,并且可以同时为测试代码服务。 运行效率 开发数据填充时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量越来越大,db:seed 的运行时间会变得越来越长,有些项目多达几分钟甚至几十分钟。 原则是: Keep it lighting speed. 只有当 db:seed
问题内容: 我打算根据其他下拉菜单的选择使用AJAX填充下拉框。我遵循了使用位于此处的jQuery的教程-http: //remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery- ajax/ ,并在选择框名称中更改了选择框ID名称。在脚本中。 当主复选框的值发生更改时,将发送ajax并返回如下: 这与教程代码中返回的JS
简介 Laravel 可以用 seed 类轻松地为数据库填充测试数据。所有的 seed 类都存放在 database/seeds 目录下。你可以任意为 seed 类命名,但是更应该遵守类似 UsersTableSeeder 的命名规范。Laravel 默认定义的一个 DatabaseSeeder 类。可以在这个类中使用 call 方法来运行其它的 seed 类从而控制数据填充的顺序。 编写 See
问题内容: 我有一个带有表,组合框的框架,我想通过组合框用数据库中的数据填充表,但是如果我与itemlistener一起使用,我不会看到没有itemlistener的表,然后我会看到包含数据的表(combob = combobox) 问题答案: 您有几个问题: 您使用不正确。您的代码可能可以运行(我不确定),但是它没有利用的功能。 从ResultSet读取数据的代码没有意义,因为您甚至根本没有从R