【发布时间】:2018-03-03 16:43:14
【问题描述】:
我现在正在编写一个 JAX-RS Web 服务。我的数据库逻辑被划分为 DAO 接口(例如interface ItemDAO 和具体实现class JDBCItemDAO),它们通过依赖注入注入到我的控制器中。现在,通过给他们模拟 DAO 来对我的控制器进行单元测试相对简单。但是,我无法真正测试我的 DAO,因为它们使用 JDBC API,并且除了 ConnectionFactory(将 java.sql.Connection 返回给调用者)之外没有任何依赖项。我真的不能只将模拟连接传递给 DAO,因为仅验证 DAO 中的 SQL 查询是不够的。我希望能够测试它在数据库中是否有效。我怎样才能做到这一点?
【问题讨论】:
-
与您测试使用 ORM 的 DAO 的方式相同(您还想测试查询是否在数据库上实际工作):您使用已知的测试数据填充测试数据库,然后调用您的DAO 方法,然后检查它们是否返回或更新预期数据。存在使第一步更容易的工具:DbSetup(无耻插件)、DBUnit,可能还有其他工具。
-
针对真实数据库的测试通常称为集成测试,因为它们不再测试单个代码单元。
-
@MickMnemonic 但是我基本上只是在测试我的 DAO 对象,而不是任何其他代码
标签: java unit-testing jdbc junit mocking