[英]mock abstract method of extended class with jmockit
我的Dao類中有一個這樣的方法:
@Override
public List<Dog> loadAllDog(Date pDate) {
final MapSqlParameterSource lParameterSource = new MapSqlParameterSource();
lParameterSource.addValue("jdate", pDate);
final String lSql = readSqlQuery("LAD");
final NamedParameterJdbcTemplate lTemplate = createNamedParameterJdbcTemplate();
return lTemplate.query(lSql, lParameterSource, new DogExtractor());
}
我使用上述方法加載數據以進行集成測試。 不幸的是,結果列表的大小約為300000個數據行。
對於我的測試,可以只處理100個數據行是可以的。 因此,我編寫了一個SQL測試文件(鍵LAD_TEST),該文件僅返回100行:
SELECT
*
FROM
DOG
WHERE
TO_CHAR(sell, 'dd.mm.yy') = TO_CHAR(:jdate,'dd.mm.yy')
and rownum <= 100
我的問題是,我可以在不更改生產代碼的情況下包括測試sql(LAD_TEST)而不是實際生產sql(LAD)的final String lSql = readSqlQuery("LAD");
???
我在測試類中使用jmockit,但我正在談論的dao類(mDogDao)沒有被嘲笑...
我測試的電話:
List<Dog> lAllDog = mDogDao.loadAllDog(lNow.getTime());
有沒有辦法在不模擬mDogDao的情況下使用jmockit進行管理?
一些忠告? 斯蒂芬·史蒂芬(Thx Stefan)
您可以模擬NamedParameterJdbcTemplate
類,並記錄期望值,以便query(...)
方法返回所需的測試數據。
為什么要在單元測試中查詢實時數據庫?
我一直在做的是針對單獨的單元測試數據庫架構或內存數據庫。 這樣,我可以確定查詢中的錯誤不會影響其他人使用的數據。
即使您需要一定數量的測試數據,也可以始終在測試之前插入數據摘錄,然后再進行清理。
而且,通過這種方式,您的單元測試也可以獨立運行。 如果一個測試修改了數據,則其他測試不會遭受可能的后果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.