我正在为 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与DAO中的rowmapper不同。所以没有达到预期。
我试图with
绕过 sql 查询和with(any(RowMapper.class))
rowmapper。它也不起作用,抱怨“并非所有参数都给出了明确的匹配器:要么所有参数都必须由匹配器指定,要么所有参数都必须由值指定,你不能混合匹配器和值”