同僚と話してて思ったこと。
テストのためにモデルなんかのコードを修正する、テストのための修正を行うのっておかしくないですか?
と言われたんだけどもどうにも自分のなかで腑に落ちなかったので書き溜めておく。
反論1
テストのための修正を行うのは必ずしもおかしいとは思わない。
むしろテストが通らないような設計自体がおかしいのだと思う。
反論2
テストを通すための修正というがその対応をしなかった場合にテストが意味をなさなくなるのであれば
それは逆にテストを行う意味自体が消失すると思う。
反論3
必ずしもテストファーストである必要というのはないと思うが
経験上テストがしやすいコードほど問題が出にくいように感じる。
とはいえあくまで感覚値なのでココらへんは不具合が発生数や発生率などで統計とってみるのが良さ気。
反論4
テストがしにくいということはリファクタリングがしにくいということで、
変化に弱いメソッドになってしまうということだと考えれるのじゃないかなと思う。
絶対に仕様が変わらないのであればそういう実装でも構わないのかもしれないが
そんなことは現実には起こりえないので変化に強い設計にするべきではないかなと思う。
総論
今後自分がクラスやメソッドを作成する際には自分がどうテストを書くかということを考えた上で実装していないといけないと強く感じた。