Проблема PowerMock с расширенным методом - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь использовать 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.invockont.Mo.core.MockGateway.doMethodCall (MockGateway.java:104) в org.powermock.core.MockGateway.methodCall (MockGateway.java:167) в .ClassC.methodA (ClassC.java)

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

Ответы [ 2 ]

0 голосов
/ 11 августа 2012

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

0 голосов
/ 04 января 2011

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