単体テストの考え方/使い方を読んでみました。
良い単体テストとはなにか?を定めて、どのような単体テストを書けばよいかを説明した良本でした。
関数型アーキテクチャーがなぜ単体テストで優れているのかの説明も興味深かった。
個人的に気になったトピックを箇条書きにしておきます。内容については、本を読んでください。
- 単体テストには、古典派とロンドン派があるが、この本では一貫して古典派を推奨。ロンドン派は、ダメな例的なかわいそうな扱い。
- ロンドン派には細かい粒度でテストできる良さがあるが、著者の言う、よい単体テストではない。
- コード網羅率や分木網羅率はテストコードの質が良いことの指標にはならない。
- リグレッションに対する保護、リファクタリングへの耐性、迅速なフィードバックを同時には満たせない。二つを満たすと三つめが満たせない。
- 出力値ベース・テストは、状態ベース、コミュニケーションベースのテストよりも、リグレッションに対する保護、リファクタリングへの耐性、を低コストで実現できる。
- 関数型アーキテクチャーに移行することは、出力値ベース・テストを行いやすくできる。
- 観測可能な振る舞いと実装の詳細を区別すること。
- ヘキサゴナル・アーキテクチャー(外側がアプリケーションサービス層、外部アプリケーションとやり取りをする。コントローラ。中側が、ドメイン層(ビジネスロジック)。関数アーキテクチャの関数になる部分。
- 単体テストでは、ドメイン・モデル/アルゴリズムをテストする。統合テストでは、コントローラをテストする。
- 統合テストは、単体テストよりも保守コストが高い。ハッピーパスと単体テストでテストできない異常ケースを行う。
- モックに置き換える依存は、管理下にない依存
関係ありそうなQiitaの記事