単体テストの考え方/使い方を読んだのでその感想。
単体テストを中心に扱った本を読んだのは初めてだったのですが、 単体テストを用いてプロダクションコードを価値あるものにすることについて終始述べられていて良かったです。
単体テストは
- 実行時間が十分に短く
- かつ、テストの実行は隔離されている(=容易に並列実行できる)
ものとして定義されています。
単体テストの実行方式はよくロンドン学派と古典学派に分類され、 後者は積極的にモックを使う、くらいの説明に留められていることが多いのですが、 これに関しても十分な説明がありました。
曰く、古典学派は単体の範囲をテストを実行するプロダクションコードの範囲と定め、 それ以外の部分はモックする、 ロンドン学派は単体の範囲をそれぞれのテストと定め、 DBといったテスト間で共有されうる依存に関してのみモックを使う、という定義をされていました。
ロンドン学派は単体テストでDBを扱うものだと思っていたので、この定義は初めて知りました。
また、テストしやすいアーキテクチャとして、 最初にクエリを行い、最後にコマンドを行う順番を推奨しており、 具体的に関数型アーキテクチャやヘキサゴナルアーキテクチャが紹介されていたのが良かったです。
スタブとモックの違いや、スタブ(クエリ)は検証しない、モック(コマンド)はするなどの説明は腹落ちしました。
本書では一貫して、
- 単体テストはリファクタリングに対する耐性を兼ね備えてなければならない
- そのために、単体テストは振る舞いをテストするべき
を柱にしていたので良かったなと思いました。