更新は:this question too.
を参照してください。私はここにいくつかの部分に答えることができます。
はただクラスがテスト可能にするインターフェースを使用して、すべての依存関係を壊すために大丈夫ですか?通常のメソッド呼び出しではなく、多くの仮想呼び出しのため、実行時に大きなオーバーヘッドが発生します。
パフォーマンスがそれのために、無あまり苦しむことになる場合は(ベンチマークを!)。あなたの開発があまりにも苦しんでいるなら、いいえ(余分な努力を見積もる)。それが大事なことではなく、長期的には助けとなり、品質であなたを助けてくれるようなら、そうです。
あなたはいつもあなたのテストクラスをテストすることができますし、TestAccessorオブジェクトを使用することでテストでテストすることもできます。これにより、テストのためだけにすべてを動的にディスパッチ可能にすることが回避されます。 (かなりの作業のように聞こえる)
テスト可能なインターフェイスの設計は簡単ではありません。場合によっては、テストのためだけに内部にアクセスするいくつかの追加メソッドを追加する必要があります。それはあなたが少しひどくなりますが、それらの機能が実際のアプリケーションにも役立ちます。
私がリファクタリングを行うと、非常に頻繁に発生し、大規模なロジック変更のためにユニットテストを完全に書き直す必要があります。私のコードの変更は、データ処理の基本的なロジックを変更することがよくあります。大規模なリファクタリングで変更する必要のない単体テストを書く方法はありません。
ディフェンションによる大規模なリファクタリングは、テストを含めて多く変更されます。リファクタリング後もテストをしてくれるので幸せです。
新しい機能を作成するよりもリファクタリングに時間を費やしている場合は、多少の変更を余儀なくされるより良いインターフェイスを見つけるために少し前に考えてください。また、インターフェイスが安定する前にユニットテストを書くことは、あなたが何をしていても苦痛です。
多くのコードが変更されたインターフェースに対して、より多くのコードを変更する必要があります。私はあなたの問題がそこにあると思う。私はほとんどの場所で十分に安定したインターフェースを持ち、今やリファクタリングだけの部品を管理してきました。
希望します。
私はコーディングする前に私は考えていません。多くの場合、クライアントが新しい機能の初期実装を見た後に要件が変更されます。もう一つの理由は、マーケティングの理由から、迅速かつ汚れた実装を行うことが時折必要であるということです。この場合、私は単体テストを気にしませんが、タイトなスケジュールのために速く汚れたハックが本当になることがあります。後でテスト可能にすることは容易ではありません。 – frast
申し訳ありませんが、私はそれを正確に暗示するつもりはありませんでした。 ;)私は実際の人生はときどき働くことが難しいことを知っています。 Quick'n汚れたハックは、不足しているテスト、必要なリファクタリング/クリーンアップ、または通常は両方の債務を伴います。現金で最初に(適切な仕事をして)、またはその後に家賃で支払う(清算)。それを回避することはできません。あなたがそれに影響を与えることができない条件の下で働くのは難しいです。 (そこにいた...) – Macke