CircleCIでInstrumented Testをする時はFirebase Test Labでよさそう

概要

アプリ側にCloud Firestoreからデータをとってくるロジックが書いてある場合に、それをCircleCIでどうやってテストしようか迷ったので、色々施行錯誤した結果を書いておきます。

結論

CircleCIが推奨しているのであれですが、Firebase Test Labを使うことにしました!無料枠も豊富にあって、超過したテスト時間しか課金されないので Instrumented Test をする時はこれでいいんじゃないかと思います。

f:id:t-kashima:20190404022655p:plain:w400
Firebase Test Lab - 割り当てと課金

施行錯誤

結論に至るまにでやったことです。

CircleCIでエミュレータが立ち上がらない

Androidに依存があるテストを実施する場合、 Instrumented Testと呼ばれるテストの種類に該当し、エミュレータを立ち上げてテストを行う必要があります。Cloud FirestoreはAndroidに依存する部分(ContextやGoogle Play Serviceなど)が多いので、まずはこの方法を試してみました。

昔のCircleCIはエミュレータの立ち上げに対応していたのですが、CircleCI2になってからは公式でサポートされていません。そのため、無理やり下記の方法を試してみたのですがいずれも上手くいきませんでした。

他にも施行錯誤してみたのですが、結局エミュレータが立ち上がりませんでした。

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を使うのが良いという結論に至りました!(あと実は課金形態を勘違いしていたので、気づいていればこれ一択でした...)

参考