使用 Moq 在 Mock<DbSet<T>> 上模拟 ToListAsync

Jer*_*oen 5 c# entity-framework moq mocking

我有一种方法可以将 List 转换为 DbSet,我在模拟数据库上下文应返回的数据时使用该方法。例如:

MockedDatabaseContext.Setup(u => u.SomeTable).Returns(GetDbSet(ListOfItems));
Run Code Online (Sandbox Code Playgroud)

但是,我尝试编写单元测试的方法曾一度使用 ToListAsync 方法将 IQueryable 转换为列表。

有没有办法使用 Moq 框架在 ToListAsync 方法调用上进行设置?

我试过这个:

dbSet.Setup(d => d.ToListAsync(CancellationToken.None)).Returns((Task<List<T>>) Task.CompletedTask);
Run Code Online (Sandbox Code Playgroud)

但这会在上面的行中引发“ThrowIfSetupExpressionInvolvesUnsupportedMember”异常。