初めての自動テスト ―Webシステムのための自動テスト基礎
アジャイル開発に絶対必須の自動テスト。そのとっかかりになりそうな本です。
いわゆる「テストピラミッド」をベースに話が進んでいく。
第1部 ピラミッドの地図を作る
1章 テストのピラミッド
美しいテストを作ったのに壊れた話。
ユニットテストの代わりにUIテスト→重くなる→エラーが見つけづらくなる、テスト実行を嫌がりだす→壊れたまま作り続ける→崩壊…
3つの教訓
- テストの種類ごとに向き不向きがある
- 「書ける」と「書くべき」は一致しない
- テストケースの実行時間が長くなると、反復回数は減る。
UIテスト(Cypressなど)は、アプリケーションを全体通して見てくれていい感じに見えるけど、コストが高い(重い&壊れやすい)
統合テストは、UIを通過しないのでUIが壊れていても通せる が、どこが壊れてるかは分かりづらい
ユニットテストは、とにかく速く、どこがだめだったかすぐわかる。ただし、つながりの部分については弱い
まずユニットテストを書いて、そこから統合→UIと進めていこう。
ユニットテストは開発のため、UIテストは検証のためのもの。
自動テストの作成を誰が行うか?開発者とテスターは立場が違い、重視するところが違う
→協調して行おう。テスターも自動テストを書こう、開発者もテスターの生産性を上げよう。
2章 ユーザーインターフェイステストに触れる
UIテストの仕組み:HTMLとCSSのタグを使って要素を取得し、アサーションを入れよう
3章 レガシーシステムにUIテストを導入する
既存のHTML、CSSを使用して要素を取得する方法を学ぶ。
4章 統合テストで点と点を結ぶ
UIがなくても、リクエストを作成する方法がわかれば統合テストが作成できる。
5章 RestfulなWebサービスの統合テスト
GET、POST、PUT、DELETEをリクエストを作成してテストする。
6章 ユニットテストで基礎を固める
ユニットテストは非常に高速。ただ、局所的なものなのでネットワークが絡むところは避けたほうがいい。
モック化大事!
7章 JavaScriptを使ったブラウザ上のユニットテスト
ブラウザで起きていることをユニットテストで確認することができる。UIテスト=E2Eではない。
8章 ピラミッドを登る
3種類のテストの得意分野で勝負する。
- 大部分はユニットテストで。
- 統合テストでは接続の部分に注力、ユニットテストでカバーできないところを対応。
- UIテストは限定的に。壊れやすいことを忘れずに。
第2部 ピラミッドを探索する
9章 プログラミング初級講座
マジの初級講座なので割愛。
10章 テストを整理する~混沌の中から法則を見つけ出す~
テストを全部同じとこにまとめると後で大変なので、整理することが必要。
11章 効果的なモックの活用
必ずしもモックを使う必要はない。現物が使えるならそれで良し。
使いやすいものではあるけど、頼りすぎないようにする。
12章 テストファースト
TDD(テスト駆動開発)について。銀の弾丸ではないので、自分でしっかりコードを書こう。
まとめ
テストは大事だけど、やみくもにやってても壊れやすいテストになり、維持できなくなってしまう。
ユニットテスト、統合テスト、UIテストのそれぞれの特性を知り、適切に組み立てよう。