私は tdd を実行し、mongodb をデータベースとして使用しようとしています。しかし、mongodb のモックの問題を解決できません。.NET でユニット テスト用に mongodb をモックする機能はありますか?
アップデート
ブログを読んでいてとても良い解決策を見つけました。ここ:
ベストアンサー1
MongoDBをモックする代わりに、レイヤーをモックするべきですの上にモンゴDB。
Student
基盤となるデータ ストアに依存しないリポジトリの操作を公開するインターフェイスを検討することもできます。たとえば、次のように、型の操作を抽象化するインターフェイスが必要になる場合があります。
public interface IStudentOperations
{
void Add(Student student);
}
他の依存関係を作成するときは、上記のインターフェースのインスタンス、または選択した高レベルの抽象化のインスタンスを挿入します。
重要なのは、MongoDBを公開しないことだ直接。
これを実行すると、作成したインターフェイスを必要なだけモック化して、モック実装に対してテストするための実装を 1 つ作成し、次に、基盤となる実装が MongoDB である場合に実装に対する操作が正しいことを検証するための独自のテストを含む実際の実装を作成できます。
確かにMongoDBのクラスのほとんどをモック化することが可能(メソッドも同様virtual
)永続性に依存しないという利点が得られます。たとえば、CouchDB や elasticsearch に切り替える場合、これらのインターフェースへの呼び出しを変更する必要はなく、新しい実装を作成するだけです。
なぜなら実装をテストしようとしているリポジトリのであれば、一般的には問題ありません。前述したように、MongoDB の関数のほとんどは でありvirtual
、ほとんどのモック ライブラリに適しています。
とはいえ、合格するにはMongoDatabase
の中へリポジトリ(作成するのではなくでリポジトリに適切なモックを作成して、単体テストで適切なモックを作成し、それをリポジトリ実装に渡してテストできるようにします。