Проблема PowerMock с расширенным методом

Я пытаюсь использовать PowerMock для имитации стороннего кода, и у меня возникла проблема с расширенным методом.

Поэтому я дам фрагмент, показывающий, что происходит.

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

Теперь я пытаюсь издеваться над ClassA, поскольку это то, что использует мой код. Макет создается нормально, однако, когда я добавляю такое ожидание:

expect(mockClassA.methodA()).andReturn("string");

Я получаю следующую ошибку:

java.lang.IllegalStateException: отсутствует определение поведения для предыдущего вызова метода methodA() в org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43) в org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke (EasyMockMethodInvocationControl.java:95) в org.powermock.core.MockGateway.doMethodCall(MockGateway.java:104) в org.powermock.core.MockGateway.methodCall(MockGateway.java:167) в .ClassC.methodA(ClassC.java )

Любые мысли о том, что мне не хватает? Я знаю, что не включил много деталей, но я подготовил ClassA для тестирования с использованием обозначений, я также поместил повтор только в одно место, чтобы убедиться, что я не неправильно помещаю mockClassA в неправильное состояние перед установкой ожидания.


person Blaine Mucklow    schedule 30.11.2010    source источник


Ответы (2)


Я сделал что-то подобное, и у меня это работает, однако я не понимаю, зачем вам здесь нужен PowerMock (вы можете сделать это без него с EasyMock/Mockito).

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassA.class)
public class ClassATest {
    @Test
    public void finalMethodString() throws Exception {
        ClassA f = PowerMock.createNiceMock(ClassA.class);
        EasyMock.expect(f.methodA()).andReturn("haha");
        EasyMock.replay(f);
        assertEquals("haha1", f.methodA());
    }
}


class ClassA extends ClassB{
    @Override
    String methodA() {
        return "1";
    }
}
class ClassB extends ClassC{
    @Override
    String methodA() {
        return "b";
    }
}
class ClassC {
    String methodA() {
        return null;
    }
}
person IAdapter    schedule 04.01.2011
comment
Я использую powermock.version=1.4.6, easymockclassextension=3.0 - person IAdapter; 04.01.2011

Исключение, которое я получил, было результатом плохих ожиданий, а не связано с расширением класса. Извините за неправильно сформулированный вопрос.

person Blaine Mucklow    schedule 10.08.2012