如何在没有ORM的情况下对DAO进行单元测试

时间:2018-03-03 16:43:14

标签: java unit-testing jdbc junit mocking

我现在正在编写JAX-RS Web服务。我的数据库逻辑已划分为DAO接口(例如interface ItemDAO和具体实现class JDBCItemDAO),它们通过依赖注入注入到我的控制器中。现在,通过给他们模拟DAO对我的控制器进行单元测试相对简单。但是,我无法真正测试我的DAO,因为它们使用JDBC API,并且没有任何依赖项,除了ConnectionFactory(将java.sql.Connection返回给调用者)。我不能真正只是将模拟连接传递给DAO,因为只是验证DAO中的SQL查询是不够的。我希望能够测试它在数据库中的工作原理。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

  1. 设置数据库。如果编写标准SQL而不依赖于特定于数据库的功能,则可以使用内存数据库,如H2
  2. 设置指向数据库的DataSource对象。这比你现在在DAO中拥有的ConnectionFactory要好。您不希望始终建立新的物理连接,因为这很昂贵。
  3. 在您的生产代码中使用合并的DataSource,例如HikariCP并且可能会在测试代码中使用更简单的内容,例如SingleConnectionDataSource
相关问题