Android におけるUI テスト設計戦略Android / iOS Test Night 番外編
View Slide
自己紹介•加藤恭平(ksfee684)‣クックパッド株式会社 技術部品質向上グループ‣ レシピサービスアプリでUI テストなどを担当‣おすすめは M:tG
Android における UI テスト設計戦略
Kotlin を活用したいい感じの DSL による いい感じの Espresso Test
対象者•ざっくりとした Kotlin 言語に関する知識•ざっくりと Espresso の API に関する知識
背景•Espresso を利用したテストを実装する環境が整っていない•Espresso を直に利用するのはちょっと…•テストケースをリーダブルにしつつ、裏の実装も簡単にしたい
Robot Pattern•Jake が発表した Instrument Test 実装パターン‣ Kotlin 言語をうまく活用‣ https://academy.realm.io/posts/kau-jake-wharton-testing-robots/•Page Object Pattern ライク
Robot PatternPaymentRobot payment = new PaymentRobot();ResultRobot result = payment.amount(42_00).recipient("[email protected]").send();result.isSuccess();
Robot Patternpayment {amount(4200)recipient("[email protected]")} send {isSuccessful()}
もうちょっと欲張る•すべての操作に対してアサーションを挿入可能に•Kotlin の DSL に形式にもう少し従って
Scope Pattern
Scope Pattern•Robot Pattern を拡張•各画面を Scope として定義•各操作はアサーションと基本的にセット‣ アサーションブロックを受け取る‣ ネストするコマンドも存在している
各画面を Scope として定義
各画面を Scope として定義•StepScope と ResultScope(e.g RecipeEditStepScope)•テストケースはシングルエントリーポイントからRootScope 下で実行される•各 Scope(画面)は RootScope の拡張関数として定義•Scope 自身をレシーバとするラムダ関数を引数として受け取る
操作はアサーションとセット
ネストする操作
まだまだこれから•DslMarker がうまく動かない•スタックトレースがわかりにくい