$30 off During Our Annual Pro Sale. View Details »

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

Kyohei Kato
February 20, 2019

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

Kyohei Kato

February 20, 2019
Tweet

More Decks by Kyohei Kato

Other Decks in Technology

Transcript

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

    View Slide

  2. 自己紹介
    •加藤恭平(ksfee684)
    ‣クックパッド株式会社

    技術部品質向上グループ
    ‣ レシピサービスアプリで
    UI テストなどを担当
    ‣おすすめは M:tG

    View Slide

  3. Android における

    UI テスト設計戦略

    View Slide

  4. View Slide

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

    いい感じの Espresso Test

    View Slide

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

    View Slide

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

    View Slide

  8. Robot Pattern
    •Jake が発表した Instrument Test 実装パターン
    ‣ Kotlin 言語をうまく活用
    ‣ https://academy.realm.io/posts/kau-jake-wharton-
    testing-robots/
    •Page Object Pattern ライク

    View Slide

  9. Robot Pattern
    PaymentRobot payment = new PaymentRobot();
    ResultRobot result = payment
    .amount(42_00)
    .recipient("[email protected]")
    .send();
    result.isSuccess();

    View Slide

  10. Robot Pattern
    payment {
    amount(4200)
    recipient("[email protected]")
    } send {
    isSuccessful()
    }

    View Slide

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

    View Slide

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

    いい感じの Espresso Test

    View Slide

  13. Scope Pattern

    View Slide

  14. Scope Pattern
    •Robot Pattern を拡張
    •各画面を Scope として定義
    •各操作はアサーションと基本的にセット
    ‣ アサーションブロックを受け取る
    ‣ ネストするコマンドも存在している

    View Slide

  15. Scope Pattern

    View Slide

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

    View Slide

  17. 各画面を Scope として定義
    •StepScope と ResultScope(e.g RecipeEditStepScope)
    •テストケースはシングルエントリーポイントから
    RootScope 下で実行される
    •各 Scope(画面)は RootScope の拡張関数として定義
    •Scope 自身をレシーバとするラムダ関数を引数として受
    け取る

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. ネストする操作

    View Slide

  25. ネストする操作

    View Slide

  26. ネストする操作

    View Slide

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

    View Slide