san*_*lan 23 java mocking powermock powermockito java-17
最近我正在将项目从 JDK 11 升级到 JDK 17。升级后,powermock 似乎出现问题。运行 AUT 时,出现以下错误:
java.lang.RuntimeException: PowerMock internal error: Should never throw exception at this level
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException accessible: module java.base does not "opens java.lang" to unnamed module @3fc34119
Run Code Online (Sandbox Code Playgroud)
您是否知道此问题的任何解决方法,如果可以,请提供解决方案。
小智 25
作为权宜之计(直到 Powermock 更新),您应该能够通过将以下参数传递给 JVM 来运行测试:
--add-opens java.base/java.lang=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)
如果您使用 运行测试Maven,则可以进行surefire-plugin如下配置:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${plugin.surefire.version}</version>
<configuration>
<argLine>--add-opens java.base/java.lang=ALL-UNNAMED</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
mbw*_*asi 12
这应该允许解决方案与从 IDE(在我的例子中为 Android Studio)内部运行的测试一起使用。
我必须这样做,因为 PowerMock 不能很好地与 Android 上的 Java 17 兼容。
在您的顶级项目 build.gradle 中,在底部添加
subprojects{
tasks.withType(Test).configureEach{
jvmArgs = jvmArgs + ['--add-opens=java.base/java.lang=ALL-UNNAMED']
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 Kotlin 作为 Gradle 文件,请参阅 https://github.com/square/okhttp/blob/f9901627431be098ad73abd725fbb3738747461c/build.gradle.kts#L153
| 归档时间: |
|
| 查看次数: |
25706 次 |
| 最近记录: |