java - 通过 JDBC 使用 JUnit 测试来测试 SQL 有什么问题吗?

标签 java sql unit-testing testing

我有一个 Java 应用程序,它使用准备好的语句对 PostgreSQL 数据库进行一些 JDBC 查询。查询不是很复杂,主要是一行,但无论如何我想对它们进行一些单元测试。

最初我编写了一个连接单独测试数据库(当然不是生产数据库)的 JUnit 测试用例,在启动时删除它,创建简单的测试内容并触发查询。我因这种方法而受到批评,因为“不应在测试中使用数据库”。

“数据库用于测试”的原因是数据库引擎是我正在测试的代码(SQL)的解释器。在没有数据库的情况下测试 SQL 的要求听起来像是在没有 Java 虚拟机的情况下测试 Java 代码的要求。

由于哲学原因,一些代码永远不能被测试的说法听起来有些奇怪,关于大多数 SQL 特性(如范围或其他更复杂的查询,或连接)实际上应该永远不要使用的建议也是如此。我还在所有数据库 Activity 周围使用了一个包装类,并有一个不与数据库对话的“SQL 服务模拟”,并在各种其他测试中使用它,但我还需要测试这个模拟的实际生产实现。

是否有其他更好的方法来测试我的 JDBC 查询集,或者我只是没有做错什么?

最佳答案

Martin Fowler 有一篇关于单元测试中的外部依赖性的好文章:

“即使像我这样的经典测试人员在出现尴尬的协作时也会使用测试替身。在与远程服务对话时,它们对于消除不确定性具有无可估量的值(value)。事实上,一些经典 xunit 测试人员也认为与外部资源的任何协作,例如数据库或文件系统,应该使用 double 。这部分是由于不确定性风险,部分是由于速度。” http://martinfowler.com/bliki/UnitTest.html

就我个人而言,我认为如果您的测试设置它们的上下文而不是依赖可能并不总是可用的外部系统会很好。

关于java - 通过 JDBC 使用 JUnit 测试来测试 SQL 有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25617942/

相关文章:

javascript - Spring Controller URL 请求映射仅在带有字符串的空白页面上不起作用

java - 跟踪 tomcat webapp 中的内存使用情况

sql - 将角色一天中的时间更改为 Postgres 中的日期?

sql - postgres 上这个 delayed_job 查询的最佳索引是什么?

javascript - 使用 $httpBackend 接收二进制响应的单元测试

c# - Visual Studio 2008 测试一种方法?

java - Hazelcast MapStore 作为 Spring 组件

java - HttpsURL连接和POST

sql - 聚合函数和 OrderBy

c# - 如何导出 C# 单元测试的结果?