【发布时间】:2014-09-02 07:23:26
【问题描述】:
我有一个 Java 应用程序,它使用准备好的语句对 PostgreSQL 数据库进行一些 JDBC 查询。查询不是很复杂,主要是一个衬垫,但无论如何我想对它们进行一些单元测试。
最初我编写了一个 JUnit 测试用例,它连接一个单独的测试数据库(当然不是生产数据库),在启动时擦除它,创建简单的测试内容并触发查询。我因这种方法而受到批评,因为“数据库不应该用于测试”。
“数据库用于测试”的原因是数据库引擎是我正在测试的代码(SQL)的解释器。在没有数据库的情况下测试 SQL 的要求听起来像是在没有 Java 虚拟机的情况下测试 Java 代码的要求。
由于哲学原因,某些代码永远不能被测试的说法听起来有些奇怪,这与实际上不应该使用大多数 SQL 功能(如范围或更复杂的查询或连接)的建议相同。我还在所有数据库活动周围使用了一个包装器类,并有一个不与数据库对话的“SQL 服务模拟”,并在各种其他测试中使用它,但我还需要测试这个模拟的实际生产实现。
是否有其他更好的方法来测试我的 JDBC 查询集,或者我只是没有做错什么?
【问题讨论】:
-
对于 jdbc 测试,最好使用具有 Postgre 类似语法的内存或基于文件的数据库。也许,hsql 或 derby。
-
当然,如果在测试中使用它比 Postgres 本身需要更少的努力。
-
初始设置所需的工作 - 必须将额外的 hsql 库添加到类路径。但是修改后,构建将不再依赖外部服务器,这是一种很好的做法。
标签: java sql unit-testing testing