CircleCIでInstrumented Testをする時はFirebase Test Labでよさそう
概要
アプリ側にCloud Firestoreからデータをとってくるロジックが書いてある場合に、それをCircleCIでどうやってテストしようか迷ったので、色々施行錯誤した結果を書いておきます。
結論
CircleCIが推奨しているのであれですが、Firebase Test Labを使うことにしました!無料枠も豊富にあって、超過したテスト時間しか課金されないので Instrumented Test
をする時はこれでいいんじゃないかと思います。
施行錯誤
結論に至るまにでやったことです。
CircleCIでエミュレータが立ち上がらない
Androidに依存があるテストを実施する場合、 Instrumented Testと呼ばれるテストの種類に該当し、エミュレータを立ち上げてテストを行う必要があります。Cloud FirestoreはAndroidに依存する部分(ContextやGoogle Play Serviceなど)が多いので、まずはこの方法を試してみました。
昔のCircleCIはエミュレータの立ち上げに対応していたのですが、CircleCI2になってからは公式でサポートされていません。そのため、無理やり下記の方法を試してみたのですがいずれも上手くいきませんでした。
Android Studio emulator: ERROR: detected a hanging thread QEMU2 main loop
とエラーになって、エミュレータが立ち上がらない。CircleCIがIPv6に対応していないのが原因のような気もしますが解決せず。- エミュレータの立ち上げに、
emulator64_x86
を使えばIPv6問題を回避できそう だったので試したのですが、CircleCIが対応していないようでエミュレータが立ち上がりませんでした。
他にも施行錯誤してみたのですが、結局エミュレータが立ち上がりませんでした。
RobolectricではCloud Firestoreに繋がらない
次にRobolectricを使ってCloud Firestoreに繋げられないかやってみました。Robolectricはエミュレータを立ち上げずに、JVM上でテストするためのライブラリです。Cloud FIrestoreを使うには、AndroidのViewの情報などは不要なため、Robolectricで十分テストできるのではないかと考えました。
結果、 色々やってみたのですが、Cloud FirestoreはGoogle Play Serviceに依存している部分が多いためか、Cloud Firestoreにうまく繋ぐことができませんでした。
結果
CircleCIで完結している方が分かりやすいかと思って、色々やってみたのですが、結局今後UIのテストが増えたり分かりやすさを考えると、Firebase Test Labを使うのが良いという結論に至りました!(あと実は課金形態を勘違いしていたので、気づいていればこれ一択でした...)