0

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

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

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

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

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

我收到以下错误:

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

对我所缺少的有什么想法吗?我知道我没有包含太多细节,但是我已经准备了 ClassA 以使用该符号进行测试,我也只将回放放在一个地方,以确保在设置期望值之前我不会错误地将 mockClassA 置于错误状态。

4

2 回答 2

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;
    }
}
于 2011-01-04T13:02:18.523 回答
0

我得到的例外是预期不佳的结果,而不是与课程扩展有关。对不起,错误陈述的问题。

于 2012-08-10T20:09:47.193 回答