0
所以我一直停留在這個問題上一整天。Jmockit /春嘲笑的依賴仍然調用真正的依賴
我在Spring 3.2測試類類型JdbcSupportDao的。如果您只是閱讀代碼,問題是非常明顯的,但我將簡要總結一下:
我在JdbcTemplate上使用@Mocked註釋來模擬查詢數據庫。問題是,寫的期望塊後,實際的JdbcTemplate方法仍然被稱爲與JMockit顯然不是公式進入的。
下面的單元測試失敗:
/*@RunWith(SpringJUnit4ClassRunner.class)*/
@RunWith(JMockit.class)
@ContextConfiguration(locations={"classpath:studentAggregateReport-servlet.xml", "classpath:applicationContext-hibernate.xml"})
public class JdbcSSODaoTest extends AbstractTransactionalJUnit4SpringContextTests {
@Mocked
JdbcTemplate jdbcTemplate;
List<String> unameList;
SSODao ssoDao;
String DUMMY_ALCID = "yattayattayatta";
@Before
public void constructDao() {
this.ssoDao = new JdbcSSODao();
((JdbcSSODao) ssoDao).setJdbcTemplate(jdbcTemplate);
}
@Test
public void testGetUnameFromAlcId() {
unameList = new ArrayList<String>() {{
add("PEEPEE");
}};
//((JdbcSSODao) ssoDao).setJdbcTemplate(jdbcTemplate);
new Expectations() {{
jdbcTemplate.query(anyString, (ResultSetExtractor<String>)any); result = unameList;
}};
String uname = ssoDao.getUnameFromAlcId(DUMMY_ALCID);
assertNotNull(uname);
}
}
,這裏是正在測試的類代碼:
public class JdbcSSODao extends JdbcDaoSupport implements SSODao {
@Override
public String getUnameFromAlcId(String alcid) {
String sql = SSOSqlUtil.createGetUnameByAlcIdSql(alcid);
logger.debug(sql);
List<String> resultLst = getJdbcTemplate().query(sql, new RowMapper<String>() {
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getString(1);
}
});
if(resultLst.isEmpty()) return null;
return resultLst.get(0);
}
}
請幫神:(