私はまだユニットテスト、特にモックに関して学習段階にあります(私はPascalMockとDUnitフレームワークを使用しています)。私が今つまずいたことの1つは、テストされたクラス/インターフェイスの実装の詳細を単体テストにハードコーディングする方法が見つからず、それが間違っていると感じたことです...
例:アプリケーション設定(基本的には名前と値のペア)を読み書きするための非常に単純なインターフェイスを実装するクラスをテストしたいと思います。コンシューマーに提示されるインターフェイスは、値が実際に保存される場所と方法(レジストリ、INIファイル、XML、データベースなど)に完全に依存しません。当然、アクセスレイヤーは、構築時にテストされたクラスに注入されるさらに別のクラスによって実装されます。このアクセスレイヤーのモックオブジェクトを作成しました。これで、レジストリ/ INIファイルなどを実際に読み書きすることなく、インターフェイス実装クラスを完全にテストできるようになりました。
ただし、テストされたクラスがアクセスしたときにモックが本物とまったく同じように動作することを確認するには、単体テストで、テストされたクラスが期待するメソッド呼び出しと戻り値を非常に明示的に定義して、モックオブジェクトを設定する必要があります。つまり、アクセスレイヤーのインターフェイスや、テスト対象のクラスがそのレイヤーを使用する方法を変更する必要がある場合は、インターフェイスであっても、そのインターフェイスを内部的に使用するクラスの単体テストも変更する必要があります。私が実際にテストしているクラスの一部はまったく変更されていません。これは、モックを使用するときに私が一緒に暮らさなければならないものですか、それともこれを回避するクラス依存関係を設計するためのより良い方法がありますか?