Насмешливый метод getClass с PowerMockito
Я хотел бы избежать насмешек над методом getClass () для класса, но, похоже, не могу обойтись без него. Я пытаюсь протестировать класс, который хранит типы классов объектов в HashMap, для конкретного метода, который будет использоваться позже. Краткий пример этого:
public class ClassToTest {
/** Map that will be populated with objects during constructor */
private Map<Class<?>, Method> map = new HashMap<Class<?>, Method>();
ClassToTest() {
/* Loop through methods in ClassToTest and if they return a boolean and
take in an InterfaceA parameter then add them to map */
}
public void testMethod(InterfaceA obj) {
final Method method = map.get(obj.getClass());
boolean ok;
if (method != null) {
ok = (Boolean) method.invoke(this, obj);
}
if (ok) {
obj.run();
}
}
public boolean isSafeClassA(final ClassA obj) {
// Work out if safe to run and then return true/false
}
public boolean isSafeClassB(final ClassB obj) {
// Work out if safe to run and then return true/fals
}
}
public interface InterfaceA {
void run()
}
public class ClassA implements InterfaceA {
public void run() {
// implements method here
}
}
public class ClassB implements InterfaceA {
public void run() {
// implements method here
}
}
Затем у меня есть тест JUnit, который выглядит примерно так:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassA.class})
public class ClassToTestTest {
private final ClassToTest tester = new ClassToTest();
@Test
public void test() {
MockGateway.MOCK_GET_CLASS_METHOD = true;
final ClassA classA = spy(new ClassA());
doReturn(ClassA.class).when(classA).getClass();
MockGateway.MOCK_GET_CLASS_METHOD = false;
tester.testMethod(classA);
verify(classA).run();
}
}
Моя проблема, хотя внутри метода test () classA.getClass (); будет возвращать ClassA, когда он будет внутри метода testMethod () тестера, он по-прежнему возвращает класс ClassA $ EnhancerByMockitoWithCGLIB $ ... и поэтому мой полезный объект всегда будет нулевым.
Можно ли как-то обойти насмешки над классом или что мне нужно сделать, чтобы это исправить?
Заранее спасибо.