2011-11-27 108 views
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); 

問題請你讓我知道了什麼錯誤?

+0

我不明白,一半的代碼使用'JdbcSpitterDao',一半使用'JdbcTwitterDao'。這只是一個真正的持續錯字,還是你有不同的類型?如果他們是不同的班級,那肯定會導致你看到的問題。 –

+0

:-)。這是真正的持續錯字。在Stackoverflow中手動更改名稱類型 –

+0

您是否在最後添加了一個斷言來檢查結果? – skaffman

回答

0

有這個建議不要嘲笑你不擁有的類型。總的來說,這是一個很好的建議,在這裏真正有意義的是不要單元測試dao。爲什麼不只是對數據庫進行操作的集成測試,並且不需要額外的邏輯?

相關問題