Open14

now in androidのcoreモジュールのテスト調査

sanaosanao

now in androidでテストのコードがcoreモジュールでどのように実装されているか気になったので調査する。

sanaosanao

FakeNiaNetworkDataSourceはNiaNetworkDataSourceのフェイク。テストダブルの手法の一つ。
https://github.com/android/nowinandroid/blob/main/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt
APIを叩いてニュースやトピックのjsonを取得しているのではなくcore/network/src/main/assetsにあるnews.jsonとtopics.jsonをデシリアライズしている

sanaosanao

ここでCoroutine Dispatcherをインジェクションしている理由は公式ドキュメントのコルーチンのベストプラクティスに書いてある
https://developer.android.com/kotlin/coroutines/coroutines-best-practices

  • 新しくコルーチンを作ったりwithContextを使うときにDispatcherをハードコードしない

理由はだいたいこの記事に書いてある通り
https://qiita.com/Panta/items/2f9e496d9efe9b4c85c3

ハードコードしないことが好ましいとされている理由としては、
CoroutineDispatcherは環境によっては動作しないことがあり、
Android環境では問題なく動作しても、単体テストの環境ではうまく動作しないということがあります。
そのためテストの時はテスト用のDispatcherを指定することがあるのですが、
ハードコードしてしまうとDispatcherをテスト用のものに置き換えることができず、
Unitテストでテストすることができないという問題が発生してしまいます。

テストの不確実さをなくすためにも重要っぽい

sanaosanao

networkモジュールのテストは、レスポンスの処理(返ってくるjsonのデシリアライズ)がうまくいくかテストしているように見える

sanaosanao

datastore周辺はProtocol Buffersの知識がないのでいったん飛ばす