Вопрос

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

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

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

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

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

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

java.lang.IllegalStateException: missing behavior definition for the preceding method call methodA() at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43) at org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke (EihymockMethodinvocationControl.java:95) на org.powermock.core.mockgateway.domethodcall (mockgateway.java:104) на org.powermock.core.mockgateway.methodcall (mockgateway.java:167) на .classc.c.methoda (classc.c.java Несомненно

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

Это было полезно?

Решение 2

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

Другие советы

Я сделал что-то вроде этого, и это работает для меня, однако я не понимаю, почему вам нужен Howermock здесь (вы можете сделать это без него с Easmock / 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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top