使用JavaDB加速DBUnit测试

DBUnit简介

随着JUnit的开发使用,对它进行了许多添加。 这些增加利用了JUnit的可插入性。 这些贡献之一是DBUnit 。 DBUnit使您的单元测试能够:

  • 将仅与您当前测试有关的数据预加载到数据库中,
  • 像往常一样运行单元测试,
  • 删除您预加载的数据,以使数据库与添加之前的数据相同。

实际上,您现在可以测试您的DAO类。 让我们举一个(非常)简单的示例:操作Person对象的PersonDao类。

您创建一个扩展org.dbunit.JdbcBasedDBTestCase 。 它迫使您实现以下方法:

  • IDataSet getDataSet() throws Exception ,其中IDataSet代表表的集合,
  • 字符串getConnectionUrl()返回数据库的连接URL,
  • 字符串getDriverClass()返回用于数据库访问的驱动程序的类名。

通过此过程,您可以使用各种数据集测试DAO类。 此外,可以从各种来源初始化这些数据集:我最近发现这些来源之一可能是Excel文件! 我同意,它不是开源的,但是比那些繁琐的XML文件更易于管理。

但是,这些测试通常是在远程和共享数据库上进行的。 缺点包括:

  1. 巨大的性能成本:远程数据库使用网络,因此,即使数据库本身表现出色,也要增加获得结果的时间,
  2. 使用错误数据的风险:如果使用共享数据库,则您可能会误以为要用于测试的数据已被另一位开发人员修改。 如果您的数据库为每个开发人员使用一个架构,那只是配置开销...

第一点是开发人员不要编写数据库测试的好方法,因为他们不能足够快地完成构建。 第二点为正确测试失败或更重要的是为错误测试成功铺平了道路。 两者都不好。

使用备用本地数据库

这些问题的答案是使用备用本地数据库。 但是,该解决方案有其自身的缺点,包括:许可证成本,每个开发人员的计算机的配置开销以及广受欢迎的“在我的计算机上不起作用”。 好吧,让我们回到共享的BD吗? 显然没有:通常有很多选择。

Apache Derby徽标

从JVM版本6开始,Sun随其JDK一起提供了一个嵌入式数据库。 这个数据库,最初叫哦,就是JavaDB,是对不太古老的Apache Derby数据库项目的重用。 Apache Derby是完全用Java实现的开源关系数据库。

主要优点是:

  • 很小的内存空间
  • 主要的SQL-99 Core / SQL-2003必需功能(请参阅表以了解不支持的功能 ),
  • 嵌入式驱动程序。

快速入门

首先,您应该提供一种以不同方式提供连接的机制,例如依赖注入,这可能是您为实际项目选择的方法(使用Spring或Guice)。 对于我的概念验证,我选择了方法重载机制以使其保持简单(没有尾随S的KISS )。

然后,一切都非常简单:

  • getConnectionUrl()应该返回"java:derby:[your_chosen_db_name];create=true"
  • getDriverClass()应该返回"org.apache.derby.jdbc.EmbeddedDriver"
  • getDataSet()应该非常简单地返回getConnection().createDataSet()

等等!

包含示例的Maven工件就在这里: JavaDB示例源

结论

JavaDB的使用并不是解决DB测试问题的金锤。 据我说,要使其完全符合SQL,还有很多事情要做。 但是,可以解析出90%的常用SQL请求。 甚至还有一个休眠方言。 总之,它可以为开发人员节省很多痛苦和时间。 那么,为什么不使用它呢?

翻译自: https://blog.frankel.ch/speeding-up-your-dbunit-tests-with-javadb/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值