我正在尝试测试一个类,它具有一些紧密耦合的依赖项。我正在考虑在 PowerMock 中使用 MockClassLoader 来模拟依赖项本身的类定义。
关于如何使用 MockClassLoader 的任何想法。
我不认为 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
}