自動テストを書くとき、 どのコードをテストすべきか? どのコードをテストすべきではないか? どのコードに対するテストをモックすべきか? について迷ったことはありますか? このようなケースに関する判断指針を Sandi Metz 氏 がまとめてくれています。 前提知識 メソッドの種類 メソッドは Query Method Command Method に分類されます。 Query Method は副作用なくデータを返すようなメソッドです。 Command Method はオブジェクトの状態を更新し、データを返さないようなメソッドです。 これらの両方の特徴を持つメソッド(状態を更新しつつ、データを返すようなメソッド) は設計すべきではないとしています。 この一連の考え方を Command query separation と呼びます。 詳細は Marktinfowler.com が詳しいです。