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