Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Scope Pattern

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Scope Pattern

Slide 16

Slide 16 text

各画面を Scope として定義

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

各画面を Scope として定義

Slide 19

Slide 19 text

各画面を Scope として定義

Slide 20

Slide 20 text

各画面を Scope として定義

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

ネストする操作

Slide 25

Slide 25 text

ネストする操作

Slide 26

Slide 26 text

ネストする操作

Slide 27

Slide 27 text

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