C# 伪造IDbSet<;T>;支持异步操作
我正试图在一个新项目中对我的第一个存储库进行单元测试,在这个项目中,我们决定将EF6主要用于异步内容。我在为我的模型伪造IDbSet时遇到了问题,并且在使用新的异步细节之前允许使用任何Linq 我正在使用一个伪造的数据库。如果我做一个简单的查询,比如C# 伪造IDbSet<;T>;支持异步操作,c#,entity-framework,unit-testing,async-await,C#,Entity Framework,Unit Testing,Async Await,我正试图在一个新项目中对我的第一个存储库进行单元测试,在这个项目中,我们决定将EF6主要用于异步内容。我在为我的模型伪造IDbSet时遇到了问题,并且在使用新的异步细节之前允许使用任何Linq 我正在使用一个伪造的数据库。如果我做一个简单的查询,比如 await set.FirstOrDefaultAsync(e => e.Approved); 这很有效 当我尝试执行以下操作时,会出现问题: await set.OrderByDescending(e => e.Date)
await set.FirstOrDefaultAsync(e => e.Approved);
这很有效
当我尝试执行以下操作时,会出现问题:
await set.OrderByDescending(e => e.Date)
.FirstOrDefaultAsync(e => e.Approved)`
然后我得到一个错误:
System.InvalidOperationException:源IQueryable的提供程序未实现IDBSyncQueryProvider
通过分解流畅的语法并在每一步检查结果,我很清楚IDBAncyQueryProvider在第一个“普通”Linq运算符之后消失(例如,OrderBy
,Where
或Select
)
我怎样才能让它工作
更新(因为有些混乱):有2个项目;称之为存储库和测试。当然,测试参考资料存储库。调用Where
发生在存储库中,它不知道FakeDbSet(也不应该知道,因为它是一个只测试的类)
更新2:简单演示。在运行单元测试之前还原Nuget包。这里有一个链接,其中包含需要实现的确切类。
有没有办法将对.Project().to()的支持添加到FakeDBSet中?转换使用AutoMapper进行。如果代码中有Porject().To(),它就会失败。我也在使用AutoMapper项目函数,它就像一个符咒。你能告诉我失败的地方吗。