java - 对使用 Spring JDBC 的 DAO 类进行单元测试

标签 java spring testing dao jdbctemplate

我有几个 DAO 对象用于从数据库中检索信息,我真的想为它们编写一些自动化测试,但我很难弄清楚如何去做。

我正在使用 Spring 的 JdbcTemplate 运行实际查询(通过准备好的语句)并将结果映射到模型对象(通过 RowMapper 类)。

如果我要编写单元测试,我不确定我会/应该如何模拟对象。例如,由于只有读取,我会使用实际的数据库连接,而不是模拟 jdbcTemplate,但我不确定这是否正确。

这是批处理中最简单的 DAO 的(简化)代码:

/**
 * Implementation of the {@link BusinessSegmentDAO} interface using JDBC.
 */
public class GPLBusinessSegmentDAO implements BusinessSegmentDAO {
    private JdbcTemplate jdbcTemplate;

    private static class BusinessSegmentRowMapper implements RowMapper<BusinessSegment>  {
        public BusinessSegment mapRow(ResultSet rs, int arg1) throws SQLException { 
            try {
                return new BusinessSegment(rs.getString(...));
            } catch (SQLException e) {
                return null;
            }
        }
    }

    private static class GetBusinessSegmentsPreparedStatementCreator 
        implements PreparedStatementCreator {
        private String region, cc, ll;
        private int regionId;

        private GetBusinessSegmentsPreparedStatementCreator(String cc, String ll) {
            this.cc = cc;
            this.ll = ll;
        }

        public PreparedStatement createPreparedStatement(Connection connection)
                throws SQLException {           
            String sql = "SELECT ...";

            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1, cc);
            ps.setString(2, ll);
            return ps;
        }
    }

    public GPLBusinessSegmentDAO(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public Collection<BusinessSegment> getBusinessSegments(String cc, String ll) {
        return jdbcTemplate.query(
                new GetBusinessSegmentsPreparedStatementCreator(cc, ll), 
                new BusinessSegmentRowMapper());
    }

}

任何想法都将不胜感激。

谢谢!

最佳答案

请查看以下链接:

  1. Testing SQL queries with Spring and DbUnit
  2. MockObjects or DBUnit for testing Code using JdbcTemplate

希望对您有所帮助。

编辑:

这里是 GitHub version of RowMapperTests方便引用。

关于java - 对使用 Spring JDBC 的 DAO 类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403722/

相关文章:

java - 通过 TCP 将图像路径 url 从本地 PC 发送到 Android 应用程序的最佳方式?

Java 并发实践 list 3.1

java - 更新表时"Parameter index out of range (3 > number of parameters, which is 2)."

spring - 将注释和字段序列化为 JSON

java - Spring Data Repository @Query - 更新并返回修改后的实体

http - Jmeter 中的变音符号和符号

java - Mockito servlet 测试 : cannot use response - it's not committed

java - JComboBox 检查 Select 是否来自程序

linux - 执行bash脚本时如何显示行号

java - Spring 框架