使用扩展方法的PowerMock问题
题
我正在尝试使用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;
}
}