春の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);
}
当然、テストは機能しません (そうでなければ、ここでこの質問をすることはありません)。問題は、テストの行マッパーが DAO の行マッパーと異なることです。だから期待は裏切らない。
with
SQLクエリとrowmapperを配置しようとしwith(any(RowMapper.class))
ました。「すべてのパラメーターに明示的なマッチャーが指定されているわけではありません。すべてのパラメーターをマッチャーで指定するか、すべてを値で指定する必要があります。マッチャーと値を混在させることはできません」