如何使用MockClassLoader?

时间:2013-08-25 19:42:43

标签: java junit powermock

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

了解如何使用MockClassLoader。

1 个答案:

答案 0 :(得分: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
}