2010-11-30 4 views
0

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

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

ClassA extends ClassB{ 
    super(); 
} 

ClassB extends ClassC{ 
    super(); 
} 

ClassC { 
    String methodA(); 
} 

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

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(EasyMockMethodInvocationControl.java:95) at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:104) at org.powermock.core.MockGateway.methodCall(MockGateway.java:167) at .ClassC.methodA(ClassC.java)

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

ответ

0

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

0

Я сделал что-то подобное, и это работает для меня, однако я не понимаю, зачем вам 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; 
    } 
} 
+0

Я использую powermock.version = 1.4.6, easymockclassextension = 3.0 – IAdapter 2011-01-04 13:03:16

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