我正在尝试使用PowerMock嘲笑一些第三方代码,而我正在使用扩展方法遇到问题。

因此,我将提供一个片段,显示正在发生的事情。

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

现在,我试图嘲笑Clasta,因为这就是我的代码正在使用的。该模拟会很好地创建,但是当我添加这样的期望时:

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)atorg.powermock.core.mockgateway.domethodcall(mockgateway.java:104)on org.powermock.core.core.mockgateway.mockgateway.methodcall(mockgateway.java.java:167)at .classc.methoda(classcc.methoda) )

对我缺少的东西有什么想法吗?我知道我还没有包含太多细节,但是我已经准备好使用符号进行测试的课程,我还只将重播放在一个地方,以确保在设置期望之前,我不会错误地将MockClassa置于错误的状态。

有帮助吗?

解决方案 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;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top