简体   繁体   English

将 Mockito 与 Java11 一起使用时的异常

[英]Exception when using Mockito with Java11

We're upgrading from Java 8 to 11. After having done all the necessary SDK changes, I started running our unit tests using maven.我们正在从 Java 8 升级到 11。在完成所有必要的 SDK 更改后,我开始使用 maven 运行我们的单元测试。 All tests that use Mockito fail with所有使用Mockito测试Mockito失败了

java.lang.ClassCastException: 
class org.mockito.codegenEventapiManager$MockitoMock$1091821173 cannot be cast to class
org.mockito.internal.creation.bytebuddy.MockAccess
(org.mockito.codegenEventapiManager$MockitoMock$1091821173 is in unnamed module of loader
org.powermock.core.classloader.javassist.JavassistMockClassLoader @1473b8c0;
org.mockito.internal.creation.bytebuddy.MockAccess is in unnamed module of loader 'app')
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:48)
    at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:25)
    at org.powermock.api.mockito.mockmaker.PowerMockMaker.createMock(PowerMockMaker.java:41)
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)
    at org.mockito.Mockito.mock(Mockito.java:1896)
    at org.mockito.Mockito.mock(Mockito.java:1805)
    [...line where we cal Mockito, rest is ommitted]

Could this be related to a version number mismatch in some of the dependencies?这可能与某些依赖项中的版本号不匹配有关吗?

We're using我们正在使用

mockito-core 2.24.0, excluding byte-buddy, byte-buddy-agent and objenesis
powermock-module-testng 2.0.4 (excluding above)
powermock-api-mockito2 2.0.4
objenesis 3.1
byte-buddy 1.9.7
byte-buddy-agent 1.9.7

Mocking the class is straight forward:模拟课程很简单:

EventapiManager mockManager = Mockito.mock(EventapiManager.class);

The mocked class itself is public and everything is working fine on Java 8.模拟类本身是公共的,并且在 Java 8 上一切正常。

I have resolved my issue in an unexpected way: while googling for solutions I came across this comment, which describes another failing test that I had.我以一种意想不到的方式解决了我的问题:在谷歌搜索解决方案时,我遇到了这条评论,它描述了我进行的另一个失败的测试。 In that test fixture, we indeed use the PowerMock annotation described in the comment, but had none of the ignored packages suggested there.在那个测试装置中,我们确实使用了评论中描述的PowerMock注释,但没有建议那里被忽略的包。 So I added them, making the complete list of ignored packages:所以我添加了它们,制作了被忽略包的完整列表:

@PowerMockIgnore({"javax.management.*", "javax.script.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"})

This has mysteriously resolved ALL failures, including the above that had its fixture in a different package.这已经神秘地解决了所有故障,包括上述在不同包中具有固定装置的故障。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM