UIテストにおけるRxIdlerが便利だった話
by
yu mitsuhori
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
UI テストにおけるRxIdler が便利だった話 @1013Youmeee
Slide 2
Slide 2 text
アジェンダ アジェンダ 1. UI テストとは 2. UI テストのつらみ 3. よくある解決策 4. RxIdler の紹介 5. まとめ
Slide 3
Slide 3 text
軽く自己紹介 軽く自己紹介 三堀 裕 株式会社エムティーアイ所属 社会人2 年目 Android アプリエンジニア 外部LT 初登壇( 汗) Twitter: @1013Youmeee Qiita: GitHub: https://qiita.com/youmeee https://github.com/youmitsu
Slide 4
Slide 4 text
話すこと 話すこと 前提 RxJava を使ってAPI コールなどの非同期処理をし ているAndroid アプリ UI テストで、いい感じに非同期処理を待たせる 「RxIdler 」というライブラリの紹介
Slide 5
Slide 5 text
誰得? 誰得? Android でUI テストをやってみたいと思っている方 RxJava を使っているアプリで、UI テストでの非同期 処理に困っている方
Slide 6
Slide 6 text
背景 背景 仕事で担当するアプリにおいてシナリオテストを自 動化 非同期処理をうまく同期的にテストする仕組みが欲 しい Android TestNight に参加した時、DeNA のSWET の 方にRxIdler が良いというお話を聞いたので試して みたらいい感じだった
Slide 7
Slide 7 text
UI テストとは UI テストとは 画面内に特定のUI コンポーネントがあるかどうか このボタンを押した後にこの画面が表示されるか などの実際に実機で操作する時のアプリの挙動をテス トできるもの
Slide 8
Slide 8 text
ANDROID におけるUI テスト ANDROID におけるUI テスト Android でUI テストを行う上で、主に二つの仕組み InstrumentalTest Espresso
Slide 9
Slide 9 text
UnitTest のようなJVM 上で動作するテストと違い、 Android の実機でテストをする仕組み。 導入方法は以下を参照 https://developer.android.com/training/testing/ui- testing/espresso-testing
Slide 10
Slide 10 text
Android のUI テスト用のフレームワーク。 リソースのid などを使用したUI の取得 UI に対するアクション(タップ、スクロールなど) アサーション( 表示されているか、文字が正しいか など) https://developer.android.com/training/testing/espre
Slide 11
Slide 11 text
UI テストのつらみ UI テストのつらみ API リクエストなどの非同期処理後の画面反映を待た ずに、 次のリソースの取得、アサーションに映ってしまいテ ストが失敗してしまう ※AsyncTask やMessageQueue などは待ってくれる
Slide 12
Slide 12 text
具体例 具体例 @Test fun testNotWaitFailed() { /** * API */ // onView(allOf(withId(R.id.data_str), isDisplayed())) .check(matches(withText("completed"))) }
Slide 13
Slide 13 text
主な解決策3 つ 主な解決策3 つ 1. sleep を使って待つパターン 2. 反映されるまでリトライするラッパークラスを作る パターン 3. UI の状態で判断するパターン(IdlingResources) Idling Resources についてはこちらを参照
Slide 14
Slide 14 text
どのパターンもそれぞれ辛い... 辛い理由はQiita に載せます
Slide 15
Slide 15 text
本題 本題 ~そこでRxIdler ~
Slide 16
Slide 16 text
の概要 の概要 Square 製のライブラリ(Jake) IdlingResources をラップしている RxJava の非同期処理をしている別スレッド上の処 理をしているとき、IdlingResource をincrement 及 びdecrement する 単純な宣言 https://github.com/square/RxIdler
Slide 17
Slide 17 text
インストール インストール に以下を記述 androidTestImplementation 'com.squareup.rx.idler:rx2-idler:0.9.0'
Slide 18
Slide 18 text
コード例 コード例 が付いているメソッド内でRxJavaPlugins を 使って、RxIdler のスケジューラを定義するだけ @Before fun setUp() { // //RxJava Scheduler (Schedulers.io RxJavaPlugins.setInitIoSchedulerHandler( Rx2Idler.create("RxJava 2.x Io Scheduler") ) }
Slide 19
Slide 19 text
メリット・デメリット メリット・デメリット
Slide 20
Slide 20 text
メリット メリット テストがとても効率的に実行可能 とても簡単 TestRunner の初期化時に一行書くだけ RxJava での非同期処理にIdlingResources を適用 してくれる プロダクトコードをいじらなくて済む
Slide 21
Slide 21 text
デメリット・注意点 デメリット・注意点 RxJava でしか使えない。 たまに待ってくれない箇所もある。(WebView にお いてフックするURL を待っている時など) サンプルを作ろうとしたが、RxIdler を使わなくて も勝手に待ってくれることもあったりするので、も う少しRxIdler で対応できるところ、できないとこ ろを明確にしていきたい
Slide 22
Slide 22 text
まとめ まとめ RxIdler を使うとRxJava での非同期処理をよしなに して待ってくれるので便利 たまに待ってくれない箇所もあるため、一旦実行し てみて落ちるようなあればsleep するなどの対策が 必要かも?
Slide 23
Slide 23 text
参考 参考 こちらの資料などを参考にさせていただきました RxJava のアプリをEspresso でテストする簡単な方 法 Test apps on Android -Android Developer- Espresso で アイドリング