繁体   English   中英

如何记录和重用JUnit测试的数据库结果

[英]How to record and reuse database results for JUnit tests

我想利用现有数据库作为JUnit测试数据的来源。 有些场景非常复杂,手动设置所有对象都很麻烦。

我正在考虑我现有DAO的装饰器,它将序列化我真正的SQL连接DAO从数据库返回并将它们记录到文件的对象。

在记录一次模式下运行JUnit测试用例的事情,之后总是重放记录的数据而不是去数据库。

是否有Java框架可以简化此过程,还是我必须自己实现它?

使用序列化框架(丑陋的内置Java Serialization API或XML或JSON映射器)将bean转换为文件并返回。 许多现代框架只需要很少的提示就可以完成他们的工作。

选项:

JSON: GsonJackson
XML: 简单Woodstox

这样,您根本不必进入JDBC。 我总是尽量避免测试数据库 - 供应商应该这样做。 我的测试只测试我是否正确使用数据库。 为此,我只需要检查查询构建器是否生成了正确的SQL字符串(但我不需要将它们发送到数据库)。

在测试数据库(通过JDBC驱动程序将数据发送到实际数据库)时,测试用例应该尽可能小和简单。 我总是针对包含测试用例和没有生产数据的特定测试数据库运行测试。 不同之处在于测试数据库的每一行都有一个目的。 生产数据库包含案例A一百万次,B一次,C丢失,因为它非常罕见。

说“我想对生产数据库的副本进行测试”是一种礼貌的方式,说“我不知道我在做什么,所以我做了很多。”

第一次测试运行时,测试数据库将从头开始重建(静态代码块是您的朋友)。 这可以防止人们将它用于任何事情。 每个开发人员都有他/她自己的实例。

如果您有一个复杂的存储过程,请将其视为任何其他Java代码:使用最简单的测试数据测试每个路径。

所有这些规则只有两个目标:让每个人在编写打到真实数据库的测试之前三思而后行 - 然后再做出决定。 第二个目标:如果测试使用数据库,它将在大多数情况下成功。

您可以在应用程序和数据库之间设置日志记录JDBC代理(如JdbcProxylog4jdbcjdbcdslogDbdaTestDriver )以保存返回的查询和结果集。 您不必编写和注入任何DAO装饰器。

稍后,您可以使用记录的数据来设置存根数据库连接以在测试中使用。 JdbcProxy和DbdaTestDriver都有内置函数来做到这一点。

[编辑]该项目允许记录JDBC操作并在以后播放: http//sourceforge.net/projects/dbdatestdriver/

使用测试数据库。 使用Jailer提取要用于测试的数据。 使用DBUnit设置测试数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM