私がグーグルで読んだ多くの人々は、実際のデータベースとの統合テストと比較して、いわゆるインメモリデータベースでリポジトリクラスのユニットテストをしようと努力しています。
後者を行うことの問題はどこにありますか?
私がグーグルで読んだ多くの人々は、実際のデータベースとの統合テストと比較して、いわゆるインメモリデータベースでリポジトリクラスのユニットテストをしようと努力しています。
後者を行うことの問題はどこにありますか?
EF を使用している場合、EF がデータを正しく永続化するかどうかを確認するためのテストを作成する必要はありません。したがって、テストに実際のデータベースは必要ありません。テストする必要があるのはコードロジックだけであり、この場合はメモリ内データベースが最適です。懸念事項を分離し、柔軟で、実行が簡単で、より高速に実行できます。実際のデータベースを使用します。
さらに、実際のデータベースとの統合テストの実行は非常に複雑です。実行する前に、いくつかの構成 (接続文字列、データベースの削除と再作成など) が必要で、時間がかかる場合があります。構成ミス (テスト中に共有データベースを使用するなど) が原因でテストが失敗する可能性があり、デバッグに時間がかかります。
インメモリデータベースまたは実際のデータベースに対してテストしているかどうかにかかわらず、ユニットテストを行っていません-どちらも統合テストです。どちらも実際に何らかの形式の接続とプロバイダーの実装をテストします。
インメモリデータベースと実際のデータベースを使用する主な利点は次のとおりです。
パターンによっては (つまり、作業単位を使用している場合)、リポジトリをテストするためのデータベースさえ必要ない可能性があります。