第三方静态方法的代码覆盖率

时间:2017-10-30 23:10:08

标签: java unit-testing code-coverage

我有一个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);
    }
  }

1 个答案:

答案 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进行不同的实现,以便它可以满足您的测试需要。