有没有办法告诉 PowerMock 不要对通过 java 反射实例化的所有对象使用 MockClassLoader?

Is there any way to tell PowerMock not to use MockClassLoader for all objects which are instantiated via java reflection?

我看到 serviceClass classloader 类型是 MockClassLoader。有什么办法可以防止这种情况发生吗? @PowerMockIgnore 是唯一的选择吗?

class A 使用powermock 运行并通过反射调用class B 的方法

@RunWith(PowerMockRunner.class)
public class A {
@Test 
public void testA() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException{
    Class<?> serviceClass = Class.forName(B.class.getName());
    Object serviceStub = serviceClass.newInstance();
    Method method = serviceClass.getMethod("fun");
    method.invoke(serviceStub);
    }
}

class B{
public void fun(){
     System.out.println("fun!");
    }
}

如果加载class,那么可以指定class加载器,例如:

@RunWith(PowerMockRunner.class)
public class A {
   @Test 
   public void testA() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException{
       ClassLoader classLoader = ClassLoader.getSystemClassLoader();
       Class<?> serviceClass = Class.forName(B.class.getName(), true, classLoader);
       Object serviceStub = serviceClass.newInstance();
       Method method = serviceClass.getMethod("fun");
       method.invoke(serviceStub);
   }
}

但是如果你希望class在隐式加载时不会被MockClassloader加载,那么使用@PowerMockIgnore是唯一的方法。