モックを使うとテストが脆くなるかも
テスト対象のオブジェクトAとAが依存するオブジェクトBがあるとする。
Aの単体テストをするとき、Bにはホンモノを使わずテストダブルを使うことがある。
code: Ruby
# RSpecでの例
expect(A.bmi).to eq 20.0
expect(B).to receive(:weight).once
この場合、テストケースが「Aの内部で B#weight が一回callされること」を知っていることになる。
つまりテストケースがオブジェクトAの内部実装の詳細の知っているということ。
これだとテストが壊れやすくなるかなと思ったのでメモ。
オブジェクトAの #bmi という公開インターフェイスは変えずに内部のリファクタリングをした結果、
B#weight の呼び出しがなくなったとしたらこのテストは壊れてしまう。
『単体テストの考え方/使い方』において著者はモックを多用するロンドン学派に賛同できないのは、まさにロンドン学派のスタイルがテスト対象の実装詳細にテストコードが密結合してしまうからだと言ってる。(p51)