Java 使用PowerMockito模拟单例公共/无效方法失败

Java 使用PowerMockito模拟单例公共/无效方法失败,java,unit-testing,powermock,powermockito,Java,Unit Testing,Powermock,Powermockito,下面是一个场景: public class classA implements classRandom { public void methodA(arg1, arg2) { POJOb objB; objB = SingletonClass_Instance().singletonMethodA(arg1); } public SingletonClass SingletonClass_Instance() { return Sing

下面是一个场景:

public class classA implements classRandom {
   public void methodA(arg1, arg2) {
       POJOb objB;
       objB = SingletonClass_Instance().singletonMethodA(arg1);
   }
   public SingletonClass SingletonClass_Instance() {
       return SingletonClass.getInstance();
   }
}

public class SingletonClass {
    public objB singletonMethodA(final String arg1) {
        return randomObj;
    }
}
我正在为a类中的methodA编写单元测试。为此,我编写了以下存根代码:

SingletonClass mockSingletonClass = PowerMockito.mock(SingletonClass.class);
POJOb = PowerMockito.mock(POJOb.class);
Mockito.when(mockSingletonClass.singletonMethodA(Mockito.anyString())).thenReturn(POJOb);
现在,在这个代码之后,我有一个代码:

POJOb objB = classA_Object.methodA(arg1, arg2);
此代码到达以下位置后立即失败:

**methodA -->  SingletonClass_Instance().singletonMethodA**
我已经使用了以下Powermockito过程:

1) import PM libs
2) Added @PrepareForTest({SingletonClass.class, POJOb.class})

我仍然无法模仿SingletonClass的Public/Void方法。它们总是被证明是空的

你需要这样做

PowerMockito.mockStatic(SingletonClass.class);
SingletonClass mockSingleton = PowerMockito.mock(SingletonClass.class);
PowerMockito.when(SingletonClass.getInstance()).thenReturn(mockSingleton);

getInstance()是一个静态方法,仅调用Mock(类)Mock对象不会模拟静态方法。因此,您必须模拟静态类(这就是您使用PowerMocktio的原因),并使用.when(Object.class.staticMethod()).thenReturn(无论您希望静态方法返回什么)。在本例中,它是模拟对象的实例。