Java 如何在使用(Power)Mockito初始化类时模拟私有静态方法的静态调用?

Java 如何在使用(Power)Mockito初始化类时模拟私有静态方法的静态调用?,java,mocking,powermockito,Java,Mocking,Powermockito,我有一个奇怪的情况,这是一些糟糕的设计的结果,但这是一个事实,我需要接受。问题是,它使我在模拟时遇到问题,因为有问题的方法在试图查找生成计算机上不存在的某些本地文件时会产生副作用 是这样的: class BadDesignedClass { public static final Properies = loadProperties(); private static Properties loadProperties() { // ... loads non-e

我有一个奇怪的情况,这是一些糟糕的设计的结果,但这是一个事实,我需要接受。问题是,它使我在模拟时遇到问题,因为有问题的方法在试图查找生成计算机上不存在的某些本地文件时会产生副作用

是这样的:

class BadDesignedClass {
    public static final Properies = loadProperties();
    private static Properties loadProperties() {
        // ... loads non-existent property file and crashes...
    }
}

我很难模拟它,因为在我提到测试类中调用real loadProperties()的类时,它在Mockito或PowerMockito进行任何模拟之前,这会导致抛出错误。

在不初始化类的情况下加载该类(详细信息可在中找到)。这样就不会调用
loadProperties
。这可以通过以下方法实现

Class<?> clazz = Thread.currentThread().getContextClassLoader()
    .loadClass("org.example.BadDesignedClass");
Class clazz=Thread.currentThread().getContextClassLoader()
.loadClass(“org.example.BadDesignedClass”);

然后,您可以将
clazz
传递给PowerMockito。

为了获得完整的解决方案,我将在这里展示我所做的一切,灵感来自SpaceTrucker的建议:

首先:在不初始化的情况下加载类:

Class<?> clazz = Thread.currentThread().getContextClassLoader()
        .loadClass("org.example.BadDesignedClass");
Third:继续像往常一样模拟类,因为
loadProperties()
现在被抑制

PowerMockito.mockStatic(BadDesignedClass.class);
PowerMockito.when(BadDesignedClass.someMethod()).thenReturn("something");
PowerMockito.mockStatic(BadDesignedClass.class);
PowerMockito.when(BadDesignedClass.someMethod()).thenReturn("something");