私はTDDにかなり熟練していると感じており、社内の「TDDエキスパート」とさえ言われていますが、それでも適切な処理方法がわからないと感じる場合があるので、他の人の意見を聞きたいと思います。 。
私の問題は次のとおりです。一般に、TDDはクラスの中心的な責任を考え、依存するクラスに他のすべての責任を抽出するのに役立ちますが、しばらくすると、クラスの1つに複数の責任があることに気付く場合があります。リファクタリングして2つのクラスに分割する必要があります。この結論は、そのクラスのテストが複雑または反復的になり始めるためによく起こります。このクラスを必要なデザインに分割するために、リファクタリングを非常に簡単に行うことができます(そして、緑色のバーを維持しながら、小さなステップでそれを行います)。私の問題は、2つのクラスを一緒にテストするのと同じ複雑で反復的なテストになってしまうことですが、クラスごとに別々のテストを行いたいと思っています。それを行うために私が考えることができる唯一の(多かれ少なかれ安全な)方法、
- テストケースを複製する
- テストの一方のコピーを1番目のクラスの代わりにモックを使用するように変更し、テストのもう1つのコピーを2番目のクラスの代わりにモックを使用するように変更します。
- 次に、コピーの1つに同じテストがすでに存在することがわかった場合は、それを削除します。
私は時々次のことをすることが可能だと思います:
- 2つのクラスを最初から作成することから始めます(もちろんTDDを使用します)
- 古いテストを変更して、古いクラスの代わりに新しいクラスを使用する
- 古いクラスを削除する
- 古いテストを削除する
これらのテクニックはどちらもかなり面倒で時間がかかるように思われるので、「本当の専門家」はこの問題にどのように取り組むのでしょうか。