経緯
- JetpackにRobolectricが統合されたことにより、
@RunWith(AndroidJUnit4::class)
にJUnit Runnerが統一された
- うまいこと実行できれば、CIで検証しやすくなる(Instrumentation TestをCIでやるのは金か手間か実行時間が必要)
駄目だった箇所
github.com
android {
sourceSets {
androidTest.java.srcDirs += ["src/test/java"]
}
}
@RunWith(AndroidJUnit4::class)
class HogeTest {
@Test
fun fugaTestCase() = compatibleTest {
}
@Test
fun barTestCase() = instrumentationTest {
}
}
- 結論から言えば、うまくいかなかった
- 実行コード内でCoroutineがUI Dispatcherで
withTimeout()
していると、すぐさまタイムアウト扱いになる
- コードを追っかけたら、Kotlin Coroutines内部でpostDelayedしているが、Robolectricは瞬時に実行するので待ち合わせがうまくいかない
- 丁寧に
InstrumentationとLocalの両実行
Instrumentationだけで実行
をうまく選択すればまあなんとか、という感じ
- androidTestのsourceSetsに加えられたソースコードは、実行時に必ずInstrumentationTestが対象となる
- Run用のConfigurationを自分で書けばもちろん実行できるけど
- 毎度それを書くのは面倒
今後どうするか?
- とりあえず実行可能箇所が増えるのは嬉しいので、しばらく両実行のコードを増やすようにしてみる