Java 引发异常的PowerMockito调用私有方法失败

Java 引发异常的PowerMockito调用私有方法失败,java,mockito,powermock,Java,Mockito,Powermock,我尝试在类MyClass中模拟以下方法foo: private Class<?> foo(final String str) throws ClassNotFoundException{ return Class.forName(str); } 它不工作并抛出异常java.lang.reflect.InvocationTargetException 但是,如果我将return Class.forName(str)替换为return Boolean.TRUE.getClass

我尝试在类
MyClass
中模拟以下方法
foo

private Class<?> foo(final String str) throws ClassNotFoundException{
    return Class.forName(str);
}
它不工作并抛出异常
java.lang.reflect.InvocationTargetException

但是,如果我将
return Class.forName(str)
替换为
return Boolean.TRUE.getClass()
foo
方法中-一切正常

如何告诉
PowerMockito
调用失败时抛出异常的方法
foo

  • 如果您不需要真正的方法调用,并且可以使用mock-将spy()更改为mock()
  • MyClass pl=PowerMockito.spy(新的MyClass())

    MyClass pl=PowerMockito.mock(MyClass.cla)

    你的代码除了spy/mock之外,没有任何变化

  • 如果需要使用real方法调用SPY()
  • 这样做:

    MyClass pl=PowerMockito.spy(新的MyClass())


    但是,如果我将return Class.forName(str)替换为return Boolean.TRUE.getClass();在foo方法中,一切都是好的

    这是由于1。这叫真正的方法,2。重新运行布尔类。但当您使用anyString()调用时,它会调用real方法并将null作为值传递

    读:):)

  • 如果您不需要真正的方法调用,并且可以使用mock-将spy()更改为mock()
  • MyClass pl=PowerMockito.spy(新的MyClass())

    MyClass pl=PowerMockito.mock(MyClass.cla)

    你的代码除了spy/mock之外,没有任何变化

  • 如果需要使用real方法调用SPY()
  • 这样做:

    MyClass pl=PowerMockito.spy(新的MyClass())


    但是,如果我将return Class.forName(str)替换为return Boolean.TRUE.getClass();在foo方法中,一切都是好的

    这是由于1。这叫真正的方法,2。重新运行布尔类。但当您使用anyString()调用时,它会调用real方法并将null作为值传递

    读:):)

    MyClass pl = PowerMockito.spy(new MyClass());
    
    try {
        PowerMockito.when(pl, PowerMockito.method(MyClass.class, "foo", String.class))
                    .withArguments(anyString())
                    .thenReturn(Boolean.TRUE.getClass());
    } catch (Exception e) {
        e.printStackTrace(); // catch ClassNotFoundException
    }
    
        try {
            PowerMockito.doReturn(Boolean.TRUE.getClass())
                    .when(pl, PowerMockito.method(MyClass.class, "foo", String.class))
                    .withArguments(anyString());
        } catch (Exception e) {
            e.printStackTrace(); // catch ClassNotFoundException
        }