Я пишу модульный тест для spring jdbc dao. Метод тестирования:
public long getALong() {
return simpleJdbcTemplate.queryForObject("sql query here", new RowMapper<Long>() {
public Long mapRow(ResultSet resultSet, int i) throws SQLException {
return resultSet.getLong("a_long");
}
});
}
Вот что у меня в тесте:
public void testGetALong() throws Exception {
final Long result = 1000L;
context.checking(new Expectations() {{
oneOf(simpleJdbcTemplate).queryForObject("sql_query", new RowMapper<Long>() {
public Long mapRow(ResultSet resultSet, int i) throws SQLException {
return resultSet.getLong("a_long");
}
});
will(returnValue(result));
}});
Long seq = dao.getALong();
context.assertIsSatisfied();
assertEquals(seq, result);
}
Естественно, тест не работает (иначе я бы не задавал здесь этот вопрос). Проблема в том, что rowmapper в тесте отличается от rowmapper в DAO. Так что ожидание не оправдалось.
Я попытался поставить with
вокруг запроса sql и with(any(RowMapper.class))
для rowmapper. Это тоже не сработает, жалуется на то, что "не всем параметрам были заданы явные сопоставители: либо все параметры должны быть указаны сопоставителями, либо все должны быть указаны значениями, нельзя смешивать сопоставители и значения"