質問: 完全な.netフレームワークをターゲットとしたコードでは、IDbConnectionをモックアップし、クエリが正しく実行されているかどうかをテストするためにmocked DataSetをポイントすることができます。同様にEntityFramework 6を使用していた場合、私は嘲笑されたDbSet.aspx)がIQueryablesを返し、それに対してデータレイヤロジックをテストすることができます。 ただし、.netコアはDataSetsをサポートしていません (ただし、将来変更される可能性があります)。 その間、クエリロジックをテストするためにIDbConnectionを使用してデーダがクエリできるオブジェクトのコレクションを作成する方法はありますか?
回答: いいえ、すべてdapperは、 `IDbConnection`クラスの上にある拡張メソッドです。 このためのInMemory実装( `IDbConnection` )(SQL文字列を理解する)はありません。 あなたがそれを完全に自律して走らせたいのであれば、単体テストを実行するたびに新しいSQLサーバを起動するのが最善の策です。これは、マイクロソフトがsqlserver用に作成したドッカーイメージで簡単に行うことができます。https : //hub.docker.com/r/microsoft/mssql-server-linux/ または... またはEntityフレームワークに移行すると、メモリ内のバッキングストアに対して単体テストを行うことができます。 どうして? ===== Dapperには、SQLを生成するための便利な機能がいくつか含まれています。それは決してSQLから抽象的ではありません。そして、SQLはC#コードの単なるテキストです。解析も実行もしません。したがって、ユニットの背後にあるデータベースを使用せずにSQL / Dapperコードをユニットテストすることはできません。 エンティティのフレームワークはそれとは異なります。データベース内でC#コード/抽象化(IDbCollectionなど)したいことがあるすべてのものを作成しようとします。次に、SQLコードを生成する1つの実装と、インメモリバッキングストアを使用する1つの実装を行います。この方法でコードを単体テストできます。 マイクロソフトのソリューション =============== マイクロソフトはしばしば、 リポジトリパターンを使用して広告を出します 。これは、基本的に、すべてのデータベース呼び出し/コマンドを別のクラスに抽象化し、これらのクラスをインターフェイスするための高価な言葉であり、コード内のすべてのインターフェイスを(依存関係注入を使用して)使用します。これで、sqlクエリに期待するすべてのコードをテストする単体テストを書くことができます。このインターフェイスでは、メソッドが実際に呼び出されたかどうかをテストするための模擬テストを行います。