Powermock:java.lang.ClassCastException

我正在将代码库升级到JDK11。我最近搬到了:

Mockito版本-2.23.4

Powermock版本-2.0.2

我使用了this链接来验证上述两个版本是否兼容。 现在,我遇到了许多奇怪的问题。其中之一是:

java.lang.RuntimeException: Invoking the beforeTestMethod method on PowerMock test listener org.powermock.api.extension.listener.AnnotationEnabler@291953c5 failed.
Caused by: java.lang.ClassCastException: class org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodinvocationControl cannot be cast to class org.powermock.api.mockito.invocation.MockitoMethodinvocationControl (org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodinvocationControl is in unnamed module of loader org.powermock.core.classloader.javassist.JavassistMockClassLoader @3ac3f6f; org.powermock.api.mockito.invocation.MockitoMethodinvocationControl is in unnamed module of loader 'app')

我在这里没有做任何花哨的事情,与当我将早期Powermock版本与JDK8一起使用时,一切都正常的时候一样,一切都没有改变。

我的@Before方法类似于:

private Xyz mockXyz = PowerMock.createMock(Xyz.class);   //Xyz is a final class 
private XyzClient mockXyzClient = PowerMock.createMock(XyzClient.class);

@Before
public void beforeTest() {
    expect(mockXyzClient.api()).andReturn(mockXyz).anyTimes();
} 

不确定是否有帮助,但是我的测试班有:

@PowerMockIgnore({ "javax.crypto.*","javax.net.ssl.*","javax.management.*","com.sun.org.apache.xerces.*","javax.xml.parsers.*","org.xml.*","org.w3c.dom.*" })

非常感谢您的帮助。

youbaio 回答:Powermock:java.lang.ClassCastException

如果其他人面对这个问题。我能够解决此问题。

我要做的就是将PowerMock.createMock()调用移到带注释的@Before方法中。所以我必须要做类似的事情:

private Xyz mockXyz;   //Xyz is a final class 
private XyzClient mockXyzClient;

@Before
public void beforeTest() {
    mockXyz = PowerMock.createMock(Xyz.class); 
    mockXyzClient = PowerMock.createMock(XyzClient.class);
    expect(mockXyzClient.api()).andReturn(mockXyz).anyTimes();
} 
本文链接:https://www.f2er.com/3168416.html

大家都在问