2016-10-19 1 views
0

Я вижу serviceClass Тип загрузчика классов MockClassLoader. Есть ли способ предотвратить это? Является ли @PowerMockIgnore единственным вариантом?Есть ли способ сказать PowerMock не использовать MockClassLoader для всех объектов, которые создаются через java-отражение?

класса А работает с powermock и вызывает метод класса 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!"); 
    } 
} 

ответ

0

При загрузке класса, то вы можете указать загрузчик классов, например:

@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); 
    } 
} 

Но если вы хотите, чтобы этот класс не был загружен MockClassloader, когда он загружен неявно, а затем используйте @PowerMockIgnore, это единственный способ.

+0

Проблема в том, что я не могу изменить существующие коды и указать classLoader. Я заключу, что есть не что иное, как @PowerMockIgnore, который будет игнорировать определенные классы или пакеты, которые я говорю игнорировать – Subhashis

Смежные вопросы