PowerMock问题与扩展方法

时间:2010-11-30 14:09:53

标签: expect extends powermock

我正在尝试使用PowerMock来模拟某些第三方代码,而我遇到了扩展方法的问题。

所以我会给出一个显示正在发生的事情的片段。

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

现在我正在尝试模拟ClassA,因为这是我的代码所使用的。模拟创建很好,但是当我添加这样的期望时:

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

我收到以下错误:

  

java.lang.IllegalStateException:前面的方法调用方法A()缺少行为定义    在org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43)    在org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke(EasyMockMethodInvocationControl.java:95)    在org.powermock.core.MockGateway.doMethodCall(MockGateway.java:104)    在org.powermock.core.MockGateway.methodCall(MockGateway.java:167)    at .ClassC.methodA(ClassC.java)

对我失踪的任何想法?我知道我没有提供太多细节,但是我已经使用符号准备了ClassA进行测试,我也只将重放放在一个地方,以确保在设置期望之前我没有错误地将mockClassA置于错误的状态。 / p>

2 个答案:

答案 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;
    }
}

答案 1 :(得分:0)

我得到的例外是由于期望不高而不是与课程扩展有关。对于错误陈述的问题感到抱歉。