Contenu connexe
Similaire à はてなにおける Android アプリのソフトウェアテスト (20)
はてなにおける Android アプリのソフトウェアテスト
- 2. こんにちは、id:nobuoka です
● 普段の仕事
– サーバーサイド: Perl
– クライアントサイド: Web (JS)、Android アプリ (Java)
● 去年の 5 月ぐらいから Android アプリ開発を学び
始めた。
– 『Android アプリ開発のための Java 入門』
http://vividcode.hatenablog.com/entry/release-notes
/java-for-android-app-text
- 11. Gradle + Android Gradle plugin
● ビルドやテスト実行が手軽にできる。
– ./gradlew connectedAndroidTest
● Ant や Maven を導入するよりも楽。
– Gradle wrapper の存在。
– Android Studio の標準ということ。
● IDE は Android Studio。
– Eclipse からまだ乗り換えられない、というチームでも
(Eclipse と併用で) Gradle を導入は有りだと思う。
- 12. Gradle + Android Gradle plugin
● まだ開発版で不安定なところもある。
– バグがあったり、API が変わったり。
– プラグインの中身を読める人間がいると安心。
● Eclipse と比べてビルドが遅い。
– より正確には実行ボタンを押してからが長い。
● 乗り換えられるなら乗り換えて良さそう。
● http://vividcode.hatenablog.com/entry/android-
app/gradle-build-system
- 13. Jenkins + Android Emulator plugin
● 定期的なテスト実行。
– リリース版パッケージを生成させるとかはしてない。
● Jenkins の設定画面上でプラグインのインストー
ル、エミュレータの設定など可能。
● プラグインが Android SDK をインストールし、ビル
ド時に Android エミュレータを起動してくれる。
● http://vividcode.hatenablog.com/entry/android-a
pp/jenkins-test
- 14. テストの導入は難しくない
● ビルドシステムに Gradle を使えばテスト実行は容
易。
● Android テスティングフレームワークの存在。
– Activity のテストや Service のテストのための
TestCase クラスが容易されている。
● Jenkins でテストを自動実行することも容易。
- 18. Android SDK のセットアップが面倒?
● Jenkins でテストを実行する際に面倒なのが
Android SDK の準備。
● ビルドスクリプト内で Android SDK の準備をする
Gradle plugin を使うと良い。
– nobuoka/vc-gradle-android-sdk-manager ← 作った
– cookpad/gradle-android-sdk-manager
– JakeWharton/sdk-manager-plugin
● CI だけでなく手元で開発する際にも便利。
- 19. Espresso (UI のテスト)
● android-test-kit に含まれる。
● UI 操作に関する単体テスト (?) をするなら
Espresso が手軽で良い。
– 複数 Activity にまたがる操作などは別のものを使っ
た方が良いだろう。
● ボタンクリックで期待通りの結果になるか、とか。
● バッドノウハウ: 古い API level (API level 8 で確認) だ
と、リストを一度スクロールしないと画面上にない
項目をタップできない。 (TouchUtils とかで。)
- 20. Espresso で UI のテストをする例
// 対象の `ListView`。
ListView listView =
(ListView) settingActivity.findViewById(android.R.id.list);
// バッドノウハウ: ドラッグしないと隠れてる項目をタップできない
TouchUtils.dragViewToTop(this, listView, 10);
// `keyValue` のキーを持つ項目をタップ。
Matcher<Preference> keyAdvancedMatcher =
PreferenceMatchers.withKey(keyValue);
onData(Matchers.<Object>allOf(keyAdvancedMatcher)).
perform(click());
● せっかくなのでデモでも。
- 22. Volley を使っているコードのテスト
● リクエスト、レスポンスの処理をモックしたい。
● Volley を使用している処理自体を置き換える。
● 別の方法: Volley ではネットワーク通信の処理が
抽象化されている (Network インターフェイス) の
で、テスト用の Network を作り、それを使う Volley
オブジェクトを使用する。
– com.android.volley.RequestQueueTest.OrderChecking
Network が参考になる。
- 24. テスト時のみ値を変えたい!
buildTypes {
/* テスト用のビルドタイプ */
testtarget.initWith(buildTypes.debug)
/* テスト時のみ BuildConfig.XXX_DRY_RUN を false にする */
release { buildConfigField "boolean", XXX_DRY_RUN "false" }
debug { buildConfigField "boolean", XXX_DRY_RUN, "false" }
testtarget { buildConfigField "boolean", XXX_DRY_RUN, "true" }
}
/* テスト用のビルドタイプを指定 */
testBuildType "testtarget"
● 使いすぎるのも良くないけど一つの方法として。
- 25. まとめ
● Gradle + Jenkins で Android アプリのテスト環境
の構築、テストの継続的な実行が容易。
● ソフトウェアテストを導入しよう!
– コスト的にためらっている? → 導入は容易
– 手動での動作確認やコードレビューなどと併用するこ
とで、より品質を高められる。
● android-test-kit など、テストのためのツールはい
ろいろある。