【问题标题】:Best Practices for JDBC/database unit testing [closed]JDBC/数据库单元测试的最佳实践[关闭]
【发布时间】:2014-06-12 18:29:35
【问题描述】:
我的代码可以与 Sybase、Postgress、DB2 等多个数据库通信。所以我有不同的模块,对每个数据库都有不同的查询。我从 H2 和 JUnit 开始进行单元测试。由于 Sybase、Postgres、DB2 等查询在 H2 中不起作用,我开始将现有的目标查询转换为 H2 可以接受的格式,我发现许多 SQL 函数,如 RANK()、分区、复杂连接更新、case when 等在 H2 中不受支持或无法按预期工作。我该如何对这段代码进行单元测试?
我应该用相应的数据库对每个 db 模块进行单元测试吗?
例如,Sybase 模块是否具有与 Sybase 而不是 H2 通信的单元测试,或者如果我对我的数据库代码进行单元测试,我是否必须使用 H2?
【问题讨论】:
标签:
java
database
unit-testing
jdbc
junit
【解决方案1】:
是的,您应该针对为其编写的数据库的真实实例测试每个特定于数据库的查询模块。根据某些定义,这是集成测试,而不是单元测试,但那又如何——不管它们叫什么,你都需要这些测试。
将其余代码的单元测试编写为真正的单元测试,删除数据库模块,因此这些测试不需要任何正在运行的数据库,也不会依赖于任何一个数据库的怪癖你支持。
设置您的大部分验收或集成测试,以针对您实际支持的最喜欢的数据库运行,每个开发人员在他们的机器上都有一个。如果仅将特殊数据库用于测试,您将了解有关该数据库的知识。至少有一个集成测试(应用中的一些基本用例)来测试每个数据库模块。
组织您的单元和集成测试,以便您可以运行所有测试,除了需要特定数据库模块的测试(但包括针对您最喜欢的模块运行的测试)。设置一个持续集成系统来运行所有测试,这样就不会遗漏较少使用的数据库模块中的错误。