Where()抛出IDbAsyncEnumerable未实现

时间:2015-05-27 20:07:50

标签: c# unit-testing repository async-await

我有一个存储库。 对于Unitest,我使用一个返回FakeDbSet的Fake-Repository(在互联网上找到的实现) 使用IDbAsyncEnumerable-Implementation。

My Fake-Methode锁定如下:

public IQueryable<Foo> GetAll()
{
var foo=new Foo();
return new FakeDbSet<Foo>() { foo }.AsQueryable();
}

所以本代码适用于UnitTest:

Foo[] foo = await MyRepo.GetAll().ToArrayAsync();

但这不是

Foo[] foo = await MyRepo.GetAll().Where(x=>x.Id==1).ToArrayAsync();

错误:源IQueryable未实现IDbAsyncEnumerable。

因为Where-Methode返回IQueryable。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

以下是MSDN中有关您案例的段落

单元测试时的异步方法

虽然仅在针对EF查询运行时支持异步方法,但是当针对DbSet的内存中测试运行时,您可能希望在单元测试中使用它们。

有关如何实现此方案的详细信息,请参阅&#39;使用异步查询进行测试&#39;使用模拟框架进行测试或使用您自己的测试进行测试的部分。

有关详细信息,请read this