数量限定セール あと  25  冊!

Android testing book cover wide

安心のリリースを実現する、
バイブル

『Androidテスト全書』

  • 製本版  3,800  円
  • 電子版  3,500  円

 4,200円  発売記念セール!

 3,800円  発売記念セール!

製本版: 送料無料!

Logo amazonpay primary fullcolor positive

Amazon Payをご利用いただくと、すでにAmazonアカウントに登録されている
お支払い情報や配送先を利用してスピーディにお買い物ができます。

本の概要

安心のリリースを実現する、
バイブル

本書は「全書」というそのタイトルが示すとおり、Android開発におけるテストについて文字どおり「すべて」を網羅すべく企画しました。

すなわち、各モジュールが適切に動作しているか検証するユニットテストの書き方に始まり、 UI操作によって引き起こされる画面の変化を検証するUIテストJUnit 5のような最新かつ今後主流になりうるテストフレームワーク、果ては開発現場で運用されているCIシステムや日々のリリースを便利にするCDの知見などを惜しげもなくカバーしています。

筆者がこの本を最初に構想したきっかけは、これら有益な情報が未だに各社または特定個人に「秘伝のタレ」 のように受け継がれるのみでAndroidコミュニティ全体に還元されている状況とはいえない現状を何とかしたいという思いからでした。 Androidは本書執筆の2018年にちょうど誕生10周年を迎えます。この間Androidのテスト手法は着実に進化して来ましたが、 ウェブで情報を検索すると未だに黎明期のノウハウがヒットすることもあるなど、 これからテストを書いていこうという人たちには若干情報の取捨選択に苦労を伴う側面があるのも事実です。

そこで普段からテストやCI/CDに対して問題意識を持っている著者陣が集まって、 この節目の2018年時点での決定版をここにまとめようではないかという結論に至りました。 したがってこの本を読んでいただければ、今までユニットテストを書いたことのない人も、 UIテストが1つもなかったプロジェクトでも、最先端のAndroidアプリ開発現場で実際に使われている生きた知見を手にすることができます。 本書では各章の著者がこれまでの豊富な経験を基に「単に公式サイトのチュートリアルをまとめただけ」から一歩踏み込んだ 「かゆいところに手が届く」内容をみなさまにお届けします。楽しみにしていてください。

みんなの声

  • Androidアプリケーション開発におけるテストコードの設計/実装、流れに対するまとまった知見を得られるとても良い書籍です。 考え方のほか、ライブラリなども最新のものであるため、今後の変化に追従するための土台にもなる知見を得られるはずです。 具体性を持った内容でもあるため、実装方法や取捨選択の目安など、意思決定の際に参考にすることもできるものだと感じました。

  • 日本でAndroid開発のテストを語るなら絶対に外せないだろう5人が、今知りうる最高の情報を提供してくれている本です。 この本はコストではなく、資産としてテストを扱っており、テストを書いたことがない開発者向けにテストの導入方法や書き方など詳細な説明があります。 UIテストやJUnit5、CICDなど中・上級者向けにコンテンツも充実しており、今後Androidのテストを書く必読書になり得る本です。

  • 気がついたらテストを書いていました。これからテストを導入される方も、既に導入されている方にもおすすめしたい内容が盛りだくさんです。

  • Androidエンジニア必読書です!
    本のタイトルどおり、Androidのテストにおける必要なカテゴリを全てをカバーしつつ、その難易度はテストを書いたことがない人からでもしっかり理解できるようになっています!
    また、すでにテストに不自由してない人もぜひ一度読んでみてください。大抵の人は知識に偏りがあるものです。自分の知らなかった手法、無意識に避けてきたものが丁寧に説明されているはずです。

  • アプリ開発における各工程のテスト設計や実装、更にはCI/CDや最新の技術動向まで、これからテストコード書く方はステップを踏んで理解を深めていく事が出来ますし、既にテストコードを書いている多くの方にとっても、本書で紹介されている入門から実践までの内容はそのどこかで必ず新しい学びを得る事が出来ると思います。 テスト導入にあたって懸念する点などもイメージしやすい様に書かれているので、どのような開発の現場においても必読の一冊と言えるのではないでしょうか。
    ホント最高かよiOS版も誰かたのむー

  • UnitテストからCI/CDまで、理由から実装までテストを網羅的に解説した文字通りの全書です。 各段階がテストの必要な理由、理論、実装、付加情報の繰り返しで記載されておりリズミカルで読みやすかったです。 実装の紹介は実業務で使う現実的な事例をもとに解説されており、体感的に読むことができました。 テストの楽しさが伝わってくる内容で、読むほどにテストしたいという気持ちが深まります。書籍、Web含めてこういう気持ちになったのは初めての経験でした。 内容はAndroidに特化していますが、それに限らない知見が詰まっているのでぜひ多くの人に読んでもらいたいです。

書籍サンプル

製本版レイアウト

PDFサンプル

目次

はじめに

  • 対象読者
  • 本書の手引き
  • 想定環境
  • サンプルコード
  • クラウドファンディングとPEAKS
  • 免責事項

第1章 テスト入門

  • 1.1 なぜテストが必要なのか
  • 1.2 Androidのテストの種類と手法
    • 1.2.1 ブラックボックステストとホワイトボックステスト
    • 1.2.2 Androidのテストの実行方法
  • 1.3 自動化されたテストの分類と役割
    • 1.3.1 ユニットテスト
    • 1.3.2 インテグレーションテスト
    • 1.3.3 UIテスト
  • 1.4 テストのピラミッド
  • 1.5 テストがもたらすさまざまなメリット
    • 1.5.1 テストは動く仕様書
    • 1.5.2 急がば回れ
    • 1.5.3 テストは資産
  • 1.6 まとめ

第2章 ユニットテスト実践入門

  • 2.1 ユニットテストとテスティングフレームワーク
  • 2.2 JUnit 4を使ったはじめてのユニットテスト
    • 2.2.1 テスト対象
    • 2.2.2 テストクラスとテストケース
    • 2.2.3 アサーション
    • 2.2.4 マッチャー
    • 2.2.5 はじめてのユニットテスト
    • 2.2.6 テスト対象メソッドの実装
    • 2.2.7 テストケースの追加
    • 2.2.8 テストケースごとの初期化・後処理
    • 2.2.9 テストケースの例外を検証する
    • 2.2.10 テストケースを一時的にスキップする
    • 2.2.11 JUnit 4のテストランナー
    • 2.2.12 JUnit 4のテストルール
  • 2.3 テストケースを減らすためのテクニック
    • 2.3.1 同値分割
    • 2.3.2 境界値
    • 2.3.3 単項目チェック
  • 2.4 AssertJを使ったアサーション
    • 2.4.1 AssertJとは
    • 2.4.2 はじめてのAssertJ
    • 2.4.3 文字列のアサーション
    • 2.4.4 数値のアサーション
    • 2.4.5 IterableやCollectionのアサーション
    • 2.4.6 AssertJの詳細な例外検証
    • 2.4.7 まとめ
  • 2.5 テストダブルを使った依存コンポーネントの差し替え
    • 2.5.1 テストダブル
  • 2.6 Mockitoでテストダブルを便利に扱う
    • 2.6.1 Mockitoとは
    • 2.6.2 Mockitoを使ったスタブ
    • 2.6.3 Mockitoを使ったモックに対するメソッド呼び出しの検証
    • 2.6.4 Mockitoを使ったスパイ
    • 2.6.5 Mockito Tips
  • 2.7 まとめ

第3章 ユニットテスト応用編

  • 3.1 Androidフレームワークのコードを使ったユニットテスト
    • 3.1.1 はじめてのRobolectric
    • 3.1.2 RobolectricとAPIレベル
    • 3.1.3 RobolectricとAndroid Jetpack
  • 3.2 SQLiteを利用したモジュールのLocal Unit Test
    • 3.2.1 Roomの利用例
    • 3.2.2 RoomとLocal Unit Test
  • 3.3 テストの構造化による可読性の向上
    • 3.3.1 Enclosedランナー
  • 3.4 非同期処理のユニットテスト
    • 3.4.1 非同期処理のユニットテストが困難である理由
    • 3.4.2 CountDownLatchを使った非同期コールバックの待ち合わせ
    • 3.4.3 コールバック内でアサーションしない改善手法
  • 3.5 RxJavaのテスト
    • 3.5.1 シンプルなObservableのテスト
    • 3.5.2 内部にRxJavaを使ったモジュールのテスト
  • 3.6 OkHttpとRetrofitを使ったモジュールのユニットテスト
    • 3.6.1 OkHttpとRetrofitの準備
    • 3.6.2 MockWebServer
  • 3.7 MVPアーキテクチャのテスト
    • 3.7.1 MVPアーキテクチャとは
    • 3.7.2 MVP各層のテスト
  • 3.8 テストのないプロジェクトにテストを導入する
  • 3.9 まとめ

第4章 UIテスト (概要編)

  • 4.1 UIテストの自動化をはじめる前に
    • 4.1.1 目的を整理する
    • 4.1.2 自動化する範囲を決める
    • 4.1.3 テストツールを選択する
    • 4.1.4 スケジュール・予算・体制を決める
  • 4.2 テストツール選択のポイント
    • 4.2.1 EspressoとAppiumの概要
    • 4.2.2 EspressoとAppiumの観点別比較
    • 4.2.3 自動化の難易度を決定付けるポイント
    • 4.2.4 自動化が不可能、または非常に困難なもの
    • 4.2.5 自動化できるが、Appiumでは工数がかかるもの
  • 4.3 長くテストコードを利用し続ける
    • 4.3.1 テストコードにPageObjectデザインパターンを適用する
    • 4.3.2 CI環境でテストコードを動かし続ける
    • 4.3.3 検証結果をわかりやすく共有する
    • 4.3.4 不安定なテストを対策する
    • 4.3.5 実行時間を短縮させる
    • 4.3.6 開発やリリースのフローに組み込む
  • 4.4 まとめ

第5章 UIテスト (Espresso編)

  • 5.1 概要
  • 5.2 セットアップ
    • 5.2.1 ビルドスクリプトの修正
    • 5.2.2 必要に応じて設定するもの
    • 5.2.3 端末のアニメーション設定
  • 5.3 Espresso Test Recorderを使ってみる
    • 5.3.1 サンプルアプリの準備
    • 5.3.2 Espresso Test Recorderの実行
    • 5.3.3 操作の記録
    • 5.3.4 アサーションの記録
    • 5.3.5 テストコードの生成と実行
  • 5.4 Espresso APIの基本
    • 5.4.1 テストクラスの作成と構造
    • 5.4.2 Espressoテストコードの基本構造
    • 5.4.3 レイアウトインスペクタ
    • 5.4.4 Viewの特定、検証でよく使うAPI
  • 5.5 画面更新を待ち合わせる
    • 5.5.1 自動同期機能が提供してくれること・してくれないこと
    • 5.5.2 自動同期機能だけではうまく動作しないときは
    • 5.5.3 IdlingResourceの登録・解除
    • 5.5.4 Espressoが提供しているIdlingResource実装を活用する
    • 5.5.5 サードパーティーが提供しているIdlingResource実装を活用する
    • 5.5.6 明示的な待ち合わせ処理を行う
    • 5.5.7 まとめ
  • 5.6 PageObjectデザインパターンの実践:長く使われ続けるテストにするために
    • 5.6.1 操作の記録とテクニック
    • 5.6.2 自動生成のテストコードを手直しする
    • 5.6.3 生成されたテストコードをリファクタリングする
    • 5.6.4 メソッドを抽出する
    • 5.6.5 PageObjectを形作る
    • 5.6.6 テストケースを実装する
  • 5.7 目的別テクニック
    • 5.7.1 RecyclerViewを操作する
    • 5.7.2 WebViewを操作する
    • 5.7.3 Viewの状態を知る
    • 5.7.4 パーミッション要求ダイアログに対応する
    • 5.7.5 カスタムマッチャー・カスタムアクションを書く
    • 5.7.6 自分でIdlingResourceを実装する
    • 5.7.7 外部アプリとのIntent送受信をテストする
  • 5.8 まとめ

第6章 UIテスト(Appium編)

  • 6.1 Appiumの概要
    • 6.1.1 アーキテクチャ
    • 6.1.2 Desired Capabilities
    • 6.1.3 利用する言語・テスティングフレームワークの選定
    • 6.1.4 Appiumを知るための参考資料
  • 6.2 Appiumを利用する
    • 6.2.1 Appiumのセットアップ
    • 6.2.2 Appiumを用いたサンプルコード
  • 6.3 UIテストを実装する
    • 6.3.1 利用するライブラリの例
    • 6.3.2 テストコードのディレクトリ構成
    • 6.3.3 Appium Desktopを利用する
    • 6.3.4 UI要素のみつけ方と操作
    • 6.3.5 UIテストのサンプルコード
  • 6.4 UIテストをより良くする
    • 6.4.1 実行する環境を変更できるようにする
    • 6.4.2 テストコード失敗時に調査しやすいようにする
    • 6.4.3 スクリーンショットを撮る
  • 6.5 プロダクトにUIテストを導入するときに決めること
    • 6.5.1 UIテストを利用する目的
    • 6.5.2 UIテストで自動化する範囲の方針
    • 6.5.3 UIテストの運用
  • 6.6 実プロダクトへのUIテストの導入
    • 6.6.1 プロダクトの説明
    • 6.6.2 プロジェクト内で決めたこと
    • 6.6.3 テストケースを考える
    • 6.6.4 テストを実行する対象を決める
  • 6.7 導入したテストコードの実装例とその説明
    • 6.7.1 既存会員のテスト
    • 6.7.2 新規会員のテスト
    • 6.7.3 補足:WebViewを扱うテスト
  • 6.8 長くテストコードを利用しつづけるための実践編
    • 6.8.1 自身の環境以外でも動かせるようにする
    • 6.8.2 実行時間を短縮させる
    • 6.8.3 各フローへの組み込み
  • 6.9 まとめ

第7章 JUnit 5

  • 7.1 AndroidとJUnit 5
    • 7.1.1 android-junit5プラグイン
    • 7.1.2 導入要件
    • 7.1.3 Local Unit TestとInstrumented Testに導入する
    • 7.1.4 Java 8言語機能に対応する
  • 7.2 テストの実行方法
    • 7.2.1 Android Studioからの実行方法
    • 7.2.2 Gradleのタスクとしての実行方法
    • 7.2.3 テストコードの配置と注意点
  • 7.3 JUnit 4からの変更点
    • 7.3.1 APIのパッケージ名(名前空間)
    • 7.3.2 アノテーション
    • 7.3.3 テストケースの分類
    • 7.3.4 テストケースのネスト
  • 7.4 パラメタライズドテスト
    • 7.4.1 特定の固定値を使用する(@ValueSource)
    • 7.4.2 指定したEnumのメンバーを使用する(@EnumSource)
    • 7.4.3 指定したメソッドの戻り値を使用する(@MethodSource)
    • 7.4.4 CSV形式の文字列、またはCSVファイルの内容を使用する(@CsvSource、@CsvFileSource)
    • 7.4.5 引数を提供する特別なクラスを作成して使用する(@ArgumentsSource)
    • 7.4.6 引数を提供する特別なクラスにパラメータを与える(@ArgumentsSource)
  • 7.5 JUnit 4 APIで記述したテストコードとの互換性
    • 7.5.1 カテゴリからタグへの自動変換
    • 7.5.2 Ruleの使用制限
  • 7.6 よく使用されるライブラリとの相性
    • 7.6.1 Robolectric
    • 7.6.2 Espresso
  • 7.7 まとめ

第8章 CI/CD

  • 8.1 継続的インテグレーション
    • 8.1.1 導入のメリット
    • 8.1.2 CIに必要な機能
    • 8.1.3 CIツール・サービスの選定基準
    • 8.1.4 プロジェクトへの導入
  • 8.2 継続的デリバリーとデプロイメントパイプライン
    • 8.2.1 開発からリリースまでの流れの見える化
    • 8.2.2 適切なフィードバックの実現
    • 8.2.3 反復可能で信頼できるリリースプロセスの確立
    • 8.2.4 デプロイメントパイプラインを実現するには
  • 8.3 デプロイメントパイプラインの構築
    • 8.3.1 テスト戦略
    • 8.3.2 CircleCIの導入
    • 8.3.3 config.ymlの作成
    • 8.3.4 セットアップと初回ビルド
    • 8.3.5 デプロイメントパイプラインの各ステージの定義
    • 8.3.6 Workflowによるシンプルなデプロイメントパイプラインの構築
  • 8.4 コミットステージの構築
    • 8.4.1 Androidプロジェクトのビルド設定
    • 8.4.2 ビルドスクリプト:コンパイル
    • 8.4.3 ビルドキャッシュの利用
    • 8.4.4 インスペクション:ツールの導入
    • 8.4.5 継続的テスト
    • 8.4.6 環境変数の利用
    • 8.4.7 DeployGateによるアプリ配信:継続的デプロイ
    • 8.4.8 作業環境の共有化
  • 8.5 受け入れテストステージの構築
    • 8.5.1 UIテストの実行手順
    • 8.5.2 Firebase Test Labのセットアップ
    • 8.5.3 gcloudを利用したCIテスト実行環境の整備
    • 8.5.4 デバッグビルドで利用する署名を指定
    • 8.5.5 UIテストの実行
    • 8.5.6 テストパラメータの整理
    • 8.5.7 CircleCIへのテスト結果の保存
    • 8.5.8 config.ymlの完成
  • 8.6 手動テストステージの構築
    • 8.6.1 手動テストステージの準備
    • 8.6.2 Instabugの導入
    • 8.6.3 アプリ配布の実行
    • 8.6.4 完了処理
  • 8.7 リリースステージの構築
    • 8.7.1 リリース署名を行う:鍵を守る
    • 8.7.2 Google Play Developerコンソールへのアップロードの自動化
    • 8.7.3 Workflowへの組み込み
    • 8.7.4 アプリの公開
  • 8.8 デプロイメントパイプラインのステージ進行
    • 8.8.1 filtersによるステージの進行制御
    • 8.8.2 Manual Approvalsによるステージの手動進行制御
  • 8.9 まとめ

付録A APPENDIX

  • A.1 Kotlinを使うための設定
    • A.1.1 新規プロジェクトでKotlinを使う
    • A.1.2 JavaプロジェクトをKotlin対応させる
  • A.2 JUnit 4のテストクラスごとの初期化と後処理
  • A.3 Mockito-Kotlinのセットアップ
    • A.3.1 Mockito-Kotlinのインストール
    • A.3.2 kotlin-allopenを使ってモックする
    • A.3.3 mock-maker-inlineを使ってモックする
  • A.4 呼び出し元と同じスレッドでタスクを処理するExecutorService
  • A.5 RxJava/RxAndroidのPluginでスケジューラ差し替え

おわりに

  • 謝辞
  • 権利表記

著者

  • 白山 文彦

    Androidのテストをチームで採り入れる際に「とりあえずこれ読んでおいて!」と安心して渡せるような本を目指しました。居酒屋の「とりあえず生で!」の感覚で気軽に手に取っていただけると嬉しいです。

  • 外山 純生

    Androidのテスト経験者が更なる高みを目指せる内容でありつつも、 テスト未経験者にとっても分かりやすくなるように、内容の選別や説明の順序を工夫しました。 その工夫の甲斐あって、Androidのテストを学びたい全ての方に役立つ本ができたと思います。 Androidアプリの開発を一通り学んだら次はテストですよ!ぜひこの本を手に取ってみてください!

  • 平田 敏之

    おまたせしましたが、Androidのテストについて幅広く学べる素晴らしい本になったと思います。 読んだ方にはなにかしらの知見があると思いますので、いろいろな方に読んでいただけると嬉しいです。

  • 菊池 紘

    JUnit 5の章を担当しました。android-junit5を検証して見つけた不具合を報告していたらリポジトリオーナーが直してくれました。書くとそんな良いことが起こる本なので、読んでも良いことが起こると思います。 冗談はさておき、テストの基本を学んだ上で、最新のテスト事情にまで触れられる本に仕上がっていると思います。ぜひ読んでください。

  • 堀江 亮介

    ユニットテストからCI/CDまで、Androidのテストに関する幅広い知見を収録することができました。自信を持ってオススメできるとても良い本になったと思います。読んでいただいた方のより良いアプリ開発のヒントとなれば幸いです。

編集者

  • 日高 正博

    テストってハードルが高いな、難しいんだよなと感じている人にこそ読んで欲しい一冊です。どこから読んでも価値のある内容になりました。

書誌情報

  • ページ数:400ページ
  • 電子版フォーマット:PDF
  • 製本版:B5変形・モノクロ
  • 発売日:2018年11月5日