簡體   English   中英

第三方靜態方法的代碼覆蓋率

[英]Code coverage for third party static method

我有一個Java類,它使用第三方庫從外部服務檢索數據。 該第三方庫具有靜態方法來檢索數據。 使用Junit或Makito,在這種情況下如何實現100%的代碼覆蓋率? 我無法模擬靜態方法並轉到多個路徑。 該類如下所示:

import com.company.dataprovider;

Class DataAccess {
  public String getData(String key) {
    try {
      DataObject data = dataprovider.getData(key);
      return data.toString();
    } catch (ThirdPartyDataException ex) {
      log(ex);
      throw new DataAccessException(ex);
    }
  }

問題的症結似乎是代碼對第三方庫有嚴格的依賴性。 如果我們可以刪除它,那我們應該處於一個更好的位置。

為此,首先我們創建一個接口來表示您的第三方庫完成的工作的類型。 例如,IDataProvider具有一種方法-getData(key)。

然后使用類似組合的方法,制作一個具體的數據提供程序實現DataProviderImpl,該實現調用靜態方法:

Class DataProviderImpl implements IDataProvider {
    public getData(key) {
        **call the third party static method**
    } 
} 

接下來,您更改類以將IDataProvider的實例作為字段,並找到某種將其傳遞的方法,或者使用setter方法或使用Spring接線:

@autowired private IDataProvider dataProvider;

現在,您的代碼對第三方庫不再有硬性依賴。

最后,對於測試,您可以使用IDataProvider的不同實現,以實現測試目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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