java - JDBC/数据库单元测试的最佳实践

标签 java database unit-testing jdbc junit

我有与多个数据库(如 Sybase、Postgress、DB2 等)通信的代码。因此,我有不同的模块,对每个数据库都有不同的查询。我开始使用 H2 和 JUnit 进行单元测试。由于 Sybase、Postgres、DB2 等查询在 H2 中不起作用,我开始将现有的目标查询转换为 H2 可以接受的格式,我发现许多 SQL 函数,如 RANK()、分区、复杂连接更新、case while 等在 H2 中不受支持或无法按预期工作。我该如何对这段代码进行单元测试?

我应该使用相应的数据库对每个数据库模块进行单元测试吗? 例如,Sybase 模块是否具有与 Sybase 而不是 H2 对话的单元测试,或者如果我对数据库代码进行单元测试,我是否必须使用 H2?

最佳答案

是的,您应该针对为其编写的数据库的真实实例来测试每个特定于数据库的查询模块。根据某些定义,这是集成测试,而不是单元测试,但那又如何——无论它们被称为什么,您都需要测试。

将其余代码的单元测试编写为真正的单元测试,删除数据库模块,因此这些测试不需要任何正在运行的数据库,并且不会依赖于任何一个数据库的怪癖你支持。

设置大部分验收或集成测试,以针对您实际支持的您最喜欢的数据库运行,每个开发人员的计算机上都有一个数据库。您将学到有关该数据库的知识,如果您仅使用特殊数据库进行测试,则不会学到这些知识。至少有一个集成测试(应用程序中的一些基本用例)来测试每个数据库模块。

组织您的单元和集成测试,以便您可以运行除需要特定数据库模块的测试之外的所有测试(但包括针对您最喜欢的测试运行的测试)。设置持续集成系统来运行所有测试,这样就不会遗漏较少使用的数据库模块中的错误。

关于java - JDBC/数据库单元测试的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191493/

相关文章:

MySQL 比较两个数据库和表并得到结果

Django "lazy query execution"原理

java - 使用 Java EE/JPA 检索数据库元信息

c# - 在 asp.net mvc 3 中登录的单元测试

c++ - kill syscommand 在 Catch2 测试用例中产生失败

java - 将字符串的ArrayList对齐到(custom)Box中将无法正确定位

Java Couchbase SDK - 没有 View 的查询

java - 从旧版 Tomcat 运行标签库

java - Spring MVC;避免 url 中的文件扩展名?

unit-testing - 在哪里可以找到 MSpec 文档?