時々、オブジェクトは密結合される必要があるだけです。たとえば、CsvFile
クラスはおそらくCsvRecord
クラス(またはICsvRecord
インターフェイス)と緊密に連携する必要があります。
ただし、私が過去に学んだことから、テスト駆動開発の主な理念の1つは、「一度に複数のクラスをテストしないこと」です。ICsvRecord
つまり、の実際のインスタンスではなく、モックまたはスタブを使用する必要がありますCsvRecord
。
しかし、このアプローチを試した後、CsvRecord
クラスをモックアウトすると少し毛むくじゃらになることに気づきました。これにより、2つの結論のうちの1つに導かれます。
- 単体テストを書くのは難しい!それはコードの匂いです!リファクタリング!
- すべての依存関係をモックアウトするのは不合理です。
モックを実際のCsvRecord
インスタンスに置き換えると、状況ははるかにスムーズに進みました。他の人々の考えを探しているとき、私はこのブログ投稿を偶然見つけました。これは上記の#2をサポートしているようです。自然に密結合されているオブジェクトの場合、モッキングについてそれほど心配する必要はありません。
私は道を外れていますか?上記の仮定2の欠点はありますか?デザインをリファクタリングすることを実際に考えるべきですか?