1

我正在尝试测试一个类,它具有一些紧密耦合的依赖项。我正在考虑在 PowerMock 中使用 MockClassLoader 来模拟依赖项本身的类定义。

关于如何使用 MockClassLoader 的任何想法。

4

1 回答 1

2

我不认为 MockClassLoader 应该直接在测试代码中使用,它看起来更像是一个 PowerMock 实现细节。相反,请查看 PowerMock 政策。例如,模拟策略实现可以抑制某些方法、抑制静态初始化程序或在每个类的基础上拦截方法调用。假设你有这样一个紧密耦合的代码:

public class Holder {    
   private final DataObject dataObject = new DataObject();

   public DataObject getData() {
     return dataObject;
   }
}

可以创建一个策略来控制 DataObjects:

public class MyMockPolicy implements PowerMockPolicy {

  public void applyClassLoadingPolicy(MockPolicyClassLoadingSettings settings) {
    settings.addFullyQualifiedNamesOfClassesToLoadByMockClassloader(Holder.class.getName());
  }

  public void applyInterceptionPolicy(MockPolicyInterceptionSettings settings) {
    Method getDataMethod = Whitebox.getMethod(Holder.class);
    DataObject dataObject = new DataObject(); //custom object
    settings.addSubtituteReturnValue(getDataMethod, dataObject);      
  }

}

并将其与注释一起应用

@RunWith(PowerMockRunner.class)
@MockPolicy(MyMockPolicy.class)
public class DependencyUserTest {
  // test methods
}
于 2013-08-25T20:29:52.660 回答