java - MockClassLoader 无法访问 jdk/internal/reflect 超类 jdk.internal.reflect.MagicAccessorImpl
问题描述
我正在将一个项目迁移到 Java9 中,在我切换到新的 Java 版本后测试开始失败,看起来 PowerMock 正在尝试访问一些它无法访问的类。
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.973 sec <<< FAILURE! - in com.Test
initializationError(com.Test) Time elapsed: 0.007 sec <<< ERROR!
org.objenesis.ObjenesisException: java.lang.reflect.InvocationTargetException
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.IllegalAccessError: class jdk.internal.reflect.ConstructorAccessorImpl loaded by org/powermock/core/classloader/MockClassLoader cannot access jdk/internal/reflect superclass jdk.internal.reflect.MagicAccessorImpl
maven-surefire-插件
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*Test.java</include>
<include>**/*Test.groovy</include>
<include>**/*Spec.*</include>
</includes>
<forkMode>always</forkMode>
<argLine>--add-modules java.xml.bind</argLine>
<argLine>--add-modules java.activation</argLine>
<argLine>--add-opens=java.base/java.lang=ALL-UNNAMED --illegal-access=warn</argLine>
</configuration>
</plugin>
powermock 依赖
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.7.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
</exclusion>
</exclusions>
</dependency>
解决方案
我对使用 powermock 的第三方 jar 有一个测试依赖项。为了解决这个错误,我不得不添加:
@PowerMockIgnore("jdk.internal.reflect.*")
到被测试的类powermock
推荐阅读
- javascript - Azure Function 如何将 JSON 转换为 Excel 并将其保存到 blob 存储
- javascript - 使用多个 Reducer 和 Actions Redux 的问题
- javascript - Javascript 日期:在 year_n+1 的第 1 周时返回 year_n 的最后一周
- java - Java方法链中如何避免null
- r - 如何将数据框几何保存到 R 中的 shapefile
- python - 如何存储每个类别对象的总提款金额?
- tensorflow - 使用 .tfrecord 文件进行预测的最佳实践
- android - 从 json 中提取数据到 kotlin 数据类
- vba - 选择性粘贴 msoClipboardFormatPlainText 在 Mac 上创建不需要的换行符
- c++ - 在类构造函数 C++ 中捕获异常