我正在爲spring jdbc dao編寫單元測試。測試方法是:使用JMock寫一個簡單的春季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查詢和with(any(RowMapper.class))
爲rowmapper。它也行不通,抱怨「並非所有參數都有明確的匹配器:要麼所有參數必須由匹配器指定,要麼全部必須由值指定,不能混合匹配器和值」
請看Poutsma自己的Github的RowMapper測試用法:https://github.com/SpringSource/spring-framework/blob/3.1.x/org.springframework.jdbc/src/test/java/org /springframework/jdbc/core/RowMapperTests.java – 2012-04-12 17:03:04