Проблема PowerMock с расширенным методом
Вопрос
Я пытаюсь использовать 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;
}
}