LoginSignup
0
0

More than 5 years have passed since last update.

InstrumentationTestでRxIdlerを使おうとしたがダメだった

Posted at

導入しようとしたけどうまくいかなかった話です。

環境

'com.android.tools.build:gradle:3.0.0'
'com.android.support.test.espresso:espresso-core:3.0.1'
'com.android.support.test:runner:1.0.1'
'com.squareup.rx.idler:rx1-idler:0.9.0'

RxIdler

RxIdlerは、EspressoのIdlingResourceを使って、RxJavaのSchedulerをいい感じに待ってくれるライブラリです。

RxJavaPluginsを利用することで、プロダクションコードに変更を加えずに導入ができます。

導入

READMEにある通り、TestRunnerを自作します。

class MyTestRunner : AndroidJUnitRunner() {
    override fun onStart() {
        RxJavaPlugins.getInstance().registerSchedulersHook(RxIdler.hooks())
        super.onStart()
    }
}

これだけで良いはずが・・・
Pre-Lollipopでは、NoClassDefFoundでテストが失敗しました。

MultiDex対応

とりあえず、Test multidex appsの通りやってみます。

だが、これでも変わらずだったので、Declare classes required in the primary DEX fileにあるmultiDexKeepProguardを使います。
これに記述したクラスは、最初に読み込まれるDEXに含まれるようになります。

app/build.gradle
android {
    buildTypes {
        release {
            multiDexKeepProguard 'multidex-config.pro'
            ...
        }
    }
}
app/multidex-config.pro
-keep class rx.functions.Action0
-keep class rx.plugins.RxJavaPlugins
-keep class com.squareup.rx.idler.RxIdler

これでNoClassDefFoundは発生しなくなりました。

Issue

全体のテストを実施していたら、この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