単体テスト計画
テスト方針
単体テストでは、主に開発した画面や機能単位のレイアウト(表示崩れなど)と動作を検証します。これにより、画面や機能単位の品質を保証することが目的となります。詳細は全体テスト計画書のテスト工程定義を参照してください。
テスト実施範囲
対象
- モバイルアプリで実装した機能や画面全般
- ただし、モバイルアプリが利用するバックエンドや外部サービスとの連携部分はモックサーバ、もしくはJestのモック機能を使う
対象外
- バックエンド
テスト観点
全体テスト計画の網羅の方針に従い、単体テストのテスト観点は以下のとおりです。
基本的には、上記のテスト観点に従います。ただし、ユースケースについては、画面単位や機能単位で完結する範囲のユースケースに絞ります。
テスト方法
事前準備、自動テスト、手動テストについて記載します。
事前準備
単体テストの実施に必要な事前準備項目は次のとおりです。
単体テスト仕様書
テスト観点を元に、開発対象の画面や機能に応じてテストケースを網羅した単体テスト仕様書を作成します。また、テスト観点ごとのテスト方法に基づいて、各種テストケースの実施手段を自動テストと手動テストに分類しておきます。
自動テスト
自動テストの利用ツール
自動テスト
テスティングフレームワークにはJest 、テスト用のライブラリにはReact Native Testing Libraryを利用します。
今回はReact Nativeの公式ドキュメントで取り上げられているツールを選択しました。 そのため、他のテスティングフレームワークおよびテスト用ライブラリとの比較検討を実施していません。
下記コマンドで自動テストを実施します。
npm run test:report
このコマンドを実行すると、カバレッジレポートファイルがcoverage
フォルダに出力されます。もし、c0/c1
のカバレッジが100%に達していない場合は、下記のフローに従ってください。
カバレッジ対象外とするには、次のとおり対応します。
- Jestがカバレッジを計算するために使用しているツール「Istanbul」のカバレッジ除外記法に従ったコメントを記述
- カバレッジ除外のコメント記述箇所は、カバレッジ対象外としたいコードの直前
- カバレッジ対象外とする理由も併せてコメントとして残す
以下は具体例です。
// コンテキストの初期値として設定するメソッドはコールされるタイミングがないため、カバレッジ対象外とする
// (コンテキストのプロパイダをレンダリングする際、別の定義で上書きされる)
const Context = React.createContext<ContextType>({
show: /* istanbul ignore next */() => {},
hide: /* istanbul ignore next */() => {},
});
手動テスト
テスト実施環境
基本的にエミュレータ/シミュレータを用いて検証します。ただし、実機でしか確認できないようなOS依存の機能(例:カメラ)については、実機を用いて検証します。このアプリで、実機でしか確認できない機能はiOSのカメラ
です。
ビルド設定
使用する環境は
local
です。ビルドタイプはデバッグビルドです。単体テストでは性能面の評価をしないため、デバッグ効率を重視する方針です。テスト端末(実機)
テスト端末バリエーションから選定します。単体テストでは、AndroidとiOSのサポート対象内の最新OSを搭載した次の端末を使用します。
- Androidスマートフォンの
機種B
- iPhoneの
機種E
- Androidスマートフォンの
手動テストの利用ツール
モックサーバ
モックサーバにはMock Service Workerを利用します。
stubby4node、SwaggerやMockoonなど他のモックサーバに比べ次の機能が充実していたため、今回Mock Service Workerを選択しました。
- モバイルアプリに組み込んで利用できる
- 条件によってレスポンスを動的に変更でき、エラーケースや応答結果で分岐する処理がテストしやすい
- レスポンス応答の遅延時間を指定できる
- テストデータが作りやすい
モックサーバは年々新しい候補が増えるため、厳密な比較検討を行っておりません。 プロジェクトの特性に応じて最適なモックサーバを選択してください。
エミュレータ/シミュレータ
エミュレータ/シミュレータの作成を参照し、エミュレータ/シミュレータを準備します。OSバージョン・アスペクト比率・解像度などの構成については、上記のテスト端末に合わせてください。
テストデータの準備
モックデータ
バックエンド連携用に、テストケースを網羅(異常系も考慮)したモックデータを準備します。
手動テストの実施
次のとおり手動テストを実施します。
- 作成したテストケースに従い、機能や画面単位での動作を検証
- テストケースごとにAndroidスマートフォン(エミュレータもしくは実機)、iPhone(シミュレータもしくは実機)それぞれで検証
- 実際の動作とテストケースの期待結果が合致していることを確認
テスト結果のエビデンス
テスト結果のエビデンスとして、以下のものを残します。
単体テスト仕様書
テストケースおよび、テスト結果を記載したドキュメントです。
カバレッジレポート
自動テストで
coverage/lcov-report
フォルダ内に出力されるカバレッジレポートファイルです。画面単位や機能単位のエビデンスとして残す必要はなく、単体テストの最後にとりまとめます。
テストの合否判断
下記項目をすべて満たしていることが、単体テストの合格条件です。
- 単体テスト仕様書に記載したすべてのテストケースに合格していること
- 自動テストを実行した際にエラーが発生していないこと
- 自動テストの
c0/c1
のカバレッジが100%に達していること