以前「テストを工夫するよりも」という記事で、テスタビリティを重視した設計が好みである旨を書いた。だが、最近は考えが変わりつつある。

「現在時刻に応じて挨拶する」メソッドにおいては、Rubyでいえば「Time.now」で現在時刻を取得するのが、もっとも自然で読みやすい形だろう。テスタビリティを重視して、引数なりインスタンス変数なりを増やしていくと、コードがどんどん複雑になり、理解しづらくなってしまう。

そもそも、Rubyの場合「Time.now」のままでも簡単にテストできる。「時刻ライブラリに介入」できるからだ。そういう言語なら、テストのためだけに(ですよね)コードを変形する必要はないんじゃないですかねえ。