1
我測試JdbcSpitterDao#getSpitterByid()
和我嘲笑jdbcTemplate.queryForObject()
爲什麼mockito的when()。thenReturn()不工作?
public class JdbcSpitterDao extends JdbcDaoSupport implements SpitterDao {
...
public Spitter getSpitterById(long id,
ParameterizedRowMapper<Spitter> parameterizedRowMapper) {
JdbcTemplate jdbcTemplate = getJdbcTemplate();
return jdbcTemplate.queryForObject(SQL_SELECT_SPITTER,
parameterizedRowMapper, id);
}
...
}
我的測試對象包含以下
ParameterizedRowMapper<Spitter> parameterizedRowMapper = new ParameterizedRowMapper<Spitter>() {
public Spitter mapRow(ResultSet rs, int rowNum) throws SQLException {
Spitter Spitter = new Spitter();
spitter.setId(rs.getLong(1));
spitter.setUsername(rs.getString(2));
spitter.setPassword(rs.getString(3));
spitter.setFullName(rs.getString(4));
spitter.setEmail(rs.getString(5));
return spitter;
}
};
JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
JdbcSpitterDao jdbcSpitterDao = new JdbcSpitterDao();
jdbcSpitterDao.setJdbcTemplate(jdbcTemplate);
// Don't connect to the database. Mock JdbcTemplate class
when(
jdbcTemplate.queryForObject(
JdbcSpitterDao.SQL_SELECT_SPITTER,
parameterizedRowMapper, 1)).thenReturn(new Spitter(1, "rajkumarm", "rajmukarm",
"Rajkumar Masaniayan", "[email protected]"));
// Actual test
Spitter actualSpitter = jdbcSpitterDao.getSpitterById(1, parameterizedRowMapper);
但when().thenReturn()
成語是沒有得到調用。該控件流向實際的jdbcTemplate
。貌似沒有與
JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
或
jdbcSpitterDao.setJdbcTemplate(jdbcTemplate);
問題請你讓我知道了什麼錯誤?
我不明白,一半的代碼使用'JdbcSpitterDao',一半使用'JdbcTwitterDao'。這只是一個真正的持續錯字,還是你有不同的類型?如果他們是不同的班級,那肯定會導致你看到的問題。 –
:-)。這是真正的持續錯字。在Stackoverflow中手動更改名稱類型 –
您是否在最後添加了一個斷言來檢查結果? – skaffman