Unit testando uma classe DAO que usa Spring JDBC
Tenho vários objetos DAO que são usados para recuperar informações de um banco de dados e eurealment quero escrever alguns testes automatizados para eles, mas estou tendo dificuldades para descobrir como fazê-l
Estou usando o SpringJdbcTemplate
para executar a consulta real (por meio de uma instrução preparada) e mapear os resultados para o objeto de modelo (por meio doRowMapper
classe)
Se eu escrevesse testes de unidade, não tenho certeza de como eu deveria / deveria zombar dos objetos. Por exemplo, como existem apenas leituras, eu usaria a conexão real com o banco de dados e não zombaria do jdbcTemplate, mas não tenho certeza se isso está corret
Aqui está o código (simplificado) para o DAO mais simples do lote:
/**
* 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());
}
}
Qualquer ideia seria apreciada
Obrigado