我正在尝试使用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>
答案 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)
我得到的例外是由于期望不高而不是与课程扩展有关。对于错误陈述的问题感到抱歉。