LoginSignup
10
6

More than 5 years have passed since last update.

Unit Test実行時にjava.lang.VerifyErrorが発生する場合の対処方法

Last updated at Posted at 2016-05-31

./gradlew testでUnit Testを実行した際にjava.lang.VerifyErrorが発生しテストが全て失敗する場合の対処方法です。

以下のようにbuid.gradleにtestOptionsを追加します。

android {
    testOptions {
        unitTests.all {
            jvmArgs "-noverify"
        }
    }
}

ただし./gradlew testDebugではjava.lang.VerifyErrorが発生しません。

./gradlew testを実行すると、testDebugtestReleaseの両方が実行されるため、java.lang.VerifyErrortestReleaseの場合に発生していることがわかります。実際にtestReleaseを実行するとjava.lang.VerifyErrorが発生しました。

これをもう少し掘り下げて調査すると、以下のコードが原因であったことがわかりました。

if (BuildConfig.DEBUG) {
    return;
}

FlurryAgent.setLogEnabled(false);
FlurryAgent.init(this, getString(R.string.flurry_api_key));

testReleaseを実行することでFlurryの初期化がUnit Test実行時に行われていた結果java.lang.VerifyErrorが発生していたと考えられます。

したがって、今回のケースではreleaseビルドでUnit Testを実行する理由が無いことから、Unit Testの実行は./gradlew testDebugで行うことでjava.lang.VerifyErrorの発生に対処することができました。

もし何らかの理由でtestReleaseを実行する必要がでた場合には、JVMオプションを指定する方法でUnit Testを実行しようと思います。

10
6
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
10
6