私はあなたが働いている方法で働いてきました。そして、私はあなたができないことをあなたに言うつもりはありません。遭遇する可能性があることについて警告します。
すべての単体テストが単に改造である場合、それらを柔軟にすることを学ぶのは困難です。それらは回帰テストに過ぎない傾向があります。リファクタリングにそれらを使用したことがないので、実際にリファクタリングを困難にする種類のテストを書くのは非常に簡単です。これは、TDDへのすべての信頼を失うまで、制御不能になりがちです。
しかし、あなたはすでに何かに取り組んでいます。止めるように言うつもりはない。最初から赤い緑のリファクタリングサイクルを探索し、それに従う時間のある何かを開始することは価値があると言えるでしょう。実際にテストを使用して、リファクタリングを支援してください。この作業方法を習得するまでは、重要なことには慎重に使用してください。これはコーディングの方法がまったく異なり、慣れるまでに時間がかかります。途中でやると、誰の役にも立ちません。
それは言った
最初に統合テストを記述してコードを処理し、APIがある程度強化されたら、実際に単体テストを追加する作業が非常に簡単であることがわかりました。私のメイン機能で実行できるテストの種類、いわば「エンドツーエンド」です。
単体テストは、1つのクラスに作用する単なるテストではないことを理解してください。作業しているAPIを次のいずれも実行せずにテストできる限り、単体テストを問題なく実行できます。
- データベースと通信します
- ネットワークを介して通信します
- それはファイルシステムに触れます
- 他の単体テストと同時に実行することはできません
- 実行するには、環境に特別な処理(構成ファイルの編集など)を行う必要があります。
Michael Feathers:ユニットテストルールのセット
したがって、エンドツーエンドのテストに複数のオブジェクトが含まれる場合は問題ありません。これはオブジェクトテストではなく単体テストです。
プライベートメソッドをテストする必要がなくなり、それを使用するパブリックメソッドをテストしてテストするように、オブジェクトを最初に独自のテストハーネスで開発する必要はありません。エンドツーエンドのストーリーとは関係なくオブジェクトの使用が検討されている場合にのみ、オブジェクトを確認するための独自のインターフェイスと動作があるように扱う必要があります。注意を払っているのは、これらのオブジェクトを公開するときです。このようにして、テストしていない約束はありません。