簡體   English   中英

用jmockit模擬擴展類的抽象方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM