Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用MockClassLoader?_Java_Junit_Powermock - Fatal编程技术网

Java 如何使用MockClassLoader?

Java 如何使用MockClassLoader?,java,junit,powermock,Java,Junit,Powermock,我试图测试一个类,它有一些紧密耦合的依赖项。我正在考虑在PowerMock中使用MockClassLoader来模拟依赖项本身的类定义 任何关于如何使用MockClassLoader的想法。我不认为MockClassLoader应该直接用于测试代码,它看起来更像是一个PowerMock实现细节。相反,请看一下PowerMock策略。例如,模拟策略实现可以在每个类的基础上抑制某些方法、抑制静态初始值设定项或拦截方法调用。 假设您有这样一个紧密耦合的代码: public class Holder {

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


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

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

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

   public DataObject getData() {
     return dataObject;
   }
}
可以创建一个策略来控制数据对象:

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
}

好的,太好了。我可以利用它来创建自定义数据对象吗。但是,为了确保,我不能使用公共访问器方法,类中的业务逻辑将直接使用dataObject。