Unité testant une classe DAO utilisant Spring JDBC

J'ai plusieurs objets DAO qui sont utilisés pour récupérer des informations à partir d'une base de données et je vraiment envie d'écrire quelques tests automatisés pour eux, mais je vais avoir un moment difficile de déterminer comment le faire.

Je suis en utilisant le Printemps JdbcTemplate pour exécuter la requête réelle (via une déclaration préparée à l'avance) et de cartographier les résultats pour le modèle objet (via le RowMapper classe).

Si je devais écrire des tests unitaires, je ne suis pas sûr de comment je pourrait/devrait se moquer des objets. Par exemple, il n'y a que des lectures, je voudrais utiliser la connexion de base de données et de ne pas se moquer de la jdbcTemplate, mais je ne suis pas sûr que c'est un droit.

Voici le (simplifié) code pour le plus simple DAO du lot:

/**
 * 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());
    }

}

Toute idée serait la bienvenue.

Merci!

source d'informationauteur Alex Ciminian