概要
UniteTestでpowermockを用いて静的クラスなどのモックを行っているところがJDKを上げるとエラーで失敗する。
llegal reflective access by org.powermock.reflect.internal.XXXX(file:...) to method java.lang.Object.clone()
Java9+でリフレクションの規制が強くなったためリフレクションのアクセスでエラーになっている。
対応
アクセスを許可するコマンドをテスト時のみ実行させる。
@build.gradle
android {
testOptions {
unitTests.returnDefaultValues = true
all {
jvmArgs = ["--illegal-access=debug",
"--add-opens","java.logging/java.util.logging=ALL-UNNAMED",
"--add-opens","java.base/java.lang.reflect=ALL-UNNAMED",
.... アクセスが必要なクラスを羅列]
}
}
}
その他
JUnit5に載せ替えて、Powermockからの脱却を行ったなどの記載も見受けられたが、試してはいない。
リフレクション関係は厳しくなる一方なので、使わずにできる方向へシフトしたほうが良いのかもしれない。
Powermock 関連Issue