./gradlew testでUnit Testを実行した際にjava.lang.VerifyErrorが発生しテストが全て失敗する場合の対処方法です。
以下のようにbuid.gradleにtestOptionsを追加します。
android {
testOptions {
unitTests.all {
jvmArgs "-noverify"
}
}
}
ただし./gradlew testDebugではjava.lang.VerifyErrorが発生しません。
./gradlew testを実行すると、testDebugとtestReleaseの両方が実行されるため、java.lang.VerifyErrorはtestReleaseの場合に発生していることがわかります。実際に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を実行しようと思います。