0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowermockがJava11以降動作しない

Posted at

概要

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?