我有一个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);
}
}
答案 0 :(得分:0)
问题的关键似乎是代码对第三方库有很强的依赖性。如果我们可以删除,我们应该在一个更好的地方。
为此,首先我们创建一个界面来表示第三方库完成的工作类型。例如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进行不同的实现,以便它可以满足您的测试需要。