13

私は、主に非同期のものにEF6を使用することにした新しいプロジェクトで、最初のリポジトリを単体テストしようとしています。モデルのIDbSetを偽装し、新しい非同期機能を使用する前にLinqを使用できるようにする問題があります。

この投稿で提供されている FakeDbSet を使用しています。次のような単純なクエリを実行すると、

await set.FirstOrDefaultAsync(e => e.Approved);

これはうまくいきます。

私がやろうとすると問題が発生します:

await set.OrderByDescending(e => e.Date)
         .FirstOrDefaultAsync(e => e.Approved)`

次に、エラーが発生します。

System.InvalidOperationException: ソース IQueryable のプロバイダーは IDbAsyncQueryProvider を実装していません。

流暢な構文を分解し、各ステップで結果を調べると、IDbAsyncQueryProvider が最初の「通常の」Linq 演算子 ( OrderByWhereまたは などSelect) の後に消えることが明らかです。

どうすればこれを機能させることができますか?

更新(混乱があったため): 2 つのプロジェクトがあります。それらをリポジトリとテストと呼びます。もちろん、テストはリポジトリを参照します。への呼び出しWhereは Repository で行われ、FakeDbSet については認識されません (テスト専用クラスであるため、FakeDbSet についても認識されません)。

更新 2 : 簡単なデモプロジェクトは、ここからダウンロードできます。単体テストを実行する前に、Nuget パッケージを復元します。

4

1 に答える 1