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

时间:2014-06-12 18:29:36

标签: java database unit-testing jdbc junit

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

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

1 个答案:

答案 0 :(得分:4)

是的,您应该根据为其编写的数据库的实际实例测试每个特定于数据库的查询模块。根据一些定义,这是集成测试,但不是单元测试,但是那么 - 你需要测试而不管它们被称为什么。

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

设置大多数验收或集成测试,以针对您实际支持的最喜欢的数据库运行,这是每个开发人员在其计算机上拥有的数据库。如果您仅使用特殊数据库进行测试,您将了解有关该数据库的信息。至少有一个集成测试(应用程序中的一些基本用例),用于运行每个数据库模块。

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