日本Androidの会テスト部が、いままで培ってきたAndroidアプリ開発におけるテストのノウハウを、実際のテストコード例とともに紹介していきます
本連載「Androidアプリ開発テスト入門」では、Androidアプリを開発している方のために、テストの基本的なノウハウを解説しています。第3回となる今回は、ユーザーインターフェイス(以下、UI)のテストについて解説します。
スマートフォンアプリケーションの特徴として、タッチ操作による魅力的なUIが挙げられます。Androidのアプリケーションの開発においても、UIの作り込みを求められることが多く、UIの品質の担保は大きな課題です。
本連載で扱うUIは、画面のレイアウト、画面遷移やイベントなど振る舞いと定義します。AndroidアプリにおけるUIは、Android SDKで用意されているActivityを使って作り込んでいきます。そして、AndroidアプリのUIテストとActivityのテストは、ほとんど同じ意味を表します。
さらに、前回の「Androidでビジネスロジックのテストを自動化するには」で解説したAndroid Testing Frameworkには、JUnitでActivityのテストを書けるフレームワークが用意されています。本稿では、このフレームワークを利用してUIテストを書いていきます。
UIテストの自動化の問題点
Activityのテストは、下記の状態の管理とスレッドを意識したコードを書く必要があるため、非常に面倒です。
上記のような点を回避しつつ、UIのテストを書くためには、かなりのテクニックとノウハウが必要です。
それでもUIテストを書くのか?
では、それでもテクニックとノウハウを駆使してUIのテストを書く理由は何でしょうか。筆者の場合、「複雑なUIコードのデグレードを回避するため」というのが、その理由です。
筆者が開発に関わるAndroidアプリはUIが凝ったものが多く、UI周りのコードは複雑になりがちです。そのため、テストコードを書いておき、定期的にテストコードを実行することによって、UI操作による振る舞いが変わっても、すぐに確認できるようにしています。
さらに、Androidアプリ開発の現場では、下記の理由から頻繁にリグレッションテストを実行することが多いのです。
そのため、前回解説したビジネスロジックだけではなく、特に複雑なUIを中心としてUIテストも自動化しておけば、不具合の早期発見ができるので安心して開発できます。
また「Jenkins」などのCIツールで、コミット後などに定期的にテストするようにしておけば、毎回自分でテストしなくても、テストが失敗すると自動的に通知されるようになるので、開発者の手間が省けます。CIツールとの連携については、本連載の第6回で解説します。
Android Testing Frameworkでは、どのようなテストを記述可能でしょうか?それを以下に挙げてみることにします。
Androidでは、リストやボタンのような豊富なUIパーツがあります。ボタンをタップしたら、画面が変化したり、データが変化したりします。UI操作によるオブジェクトの状態の変化が正しいかどうかをチェックしたいときに、このテストを作成します。
Activityには、「ライフサイクル」というものがあります。
例えば、画面遷移で別のActivityを起動した場合、現在のActivityは停止されます。停止したActivityに制御が戻って来た場合でも、その間にメモリの問題でActivityを解放してしまう場合があります。
このように、Activityが停止/復帰した場合に、きちんとデータを保存しているかどうか、もしくはデータがなくなっていても問題なく動作するかどうかをチェックする必要があります。
Androidでは、画面遷移を「Intent」という仕組みを使い、別のActivityを起動することによって実現します。このIntentを正しく発行しているかどうかをチェックすることで、画面遷移の正当性を確認できます。
上記を行うためのAndroid Testing Frameworkの使い方を、次ページから解説していきます。
Copyright © ITmedia, Inc. All Rights Reserved.