0
を呼び出していますので、私はこの問題を一日中解決しています。Jmockit/Springのmocked依存関係は、依然としてReal依存関係
私はSpring 3.2でJdbcSupportDao型のクラスをテストしています。この問題は、コードを読んだだけではわかりやすくなりますが、簡単に要約します。
JdbcTemplateで@Mockedアノテーションを使用して、データベースのクエリを模擬します。問題は、Expectationsブロックを書いた後、実際の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);
}
}
神の:(