Android における UI テスト設計戦略

024ce2681fa10ce9c1d8aa707d376d72?s=47 ksfee684
February 20, 2019

Android における UI テスト設計戦略

024ce2681fa10ce9c1d8aa707d376d72?s=128

ksfee684

February 20, 2019
Tweet

Transcript

  1. Android における UI テスト設計戦略 Android / iOS Test Night 番外編

  2. 自己紹介 •加藤恭平(ksfee684) ‣クックパッド株式会社
 技術部品質向上グループ ‣ レシピサービスアプリで UI テストなどを担当 ‣おすすめは M:tG

  3. Android における
 UI テスト設計戦略

  4. None
  5. Kotlin を活用した いい感じの DSL による
 いい感じの Espresso Test

  6. 対象者 •ざっくりとした Kotlin 言語に関する知識 •ざっくりと Espresso の API に関する知識

  7. 背景 •Espresso を利用したテストを実装する環境が整ってい ない •Espresso を直に利用するのはちょっと… •テストケースをリーダブルにしつつ、裏の実装も簡単 にしたい

  8. Robot Pattern •Jake が発表した Instrument Test 実装パターン ‣ Kotlin 言語をうまく活用

    ‣ https://academy.realm.io/posts/kau-jake-wharton- testing-robots/ •Page Object Pattern ライク
  9. Robot Pattern PaymentRobot payment = new PaymentRobot(); ResultRobot result =

    payment .amount(42_00) .recipient("foo@bar.com") .send(); result.isSuccess();
  10. Robot Pattern payment { amount(4200) recipient("foo@bar.com") } send { isSuccessful()

    }
  11. もうちょっと欲張る •すべての操作に対してアサーションを挿入可能に •Kotlin の DSL に形式にもう少し従って

  12. Kotlin を活用した いい感じの DSL による
 いい感じの Espresso Test

  13. Scope Pattern

  14. Scope Pattern •Robot Pattern を拡張 •各画面を Scope として定義 •各操作はアサーションと基本的にセット ‣

    アサーションブロックを受け取る ‣ ネストするコマンドも存在している
  15. Scope Pattern

  16. 各画面を Scope として定義

  17. 各画面を Scope として定義 •StepScope と ResultScope(e.g RecipeEditStepScope) •テストケースはシングルエントリーポイントから RootScope 下で実行される

    •各 Scope(画面)は RootScope の拡張関数として定義 •Scope 自身をレシーバとするラムダ関数を引数として受 け取る
  18. 各画面を Scope として定義

  19. 各画面を Scope として定義

  20. 各画面を Scope として定義

  21. 操作はアサーションとセット

  22. 操作はアサーションとセット

  23. 操作はアサーションとセット

  24. ネストする操作

  25. ネストする操作

  26. ネストする操作

  27. まだまだこれから •DslMarker がうまく動かない •スタックトレースがわかりにくい