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