我想DbSet
使用Foq模拟一个实体框架。它类似于:
let patients =
([
Patient(Guid "00000000-0000-0000-0000-000000000001");
Patient(Guid "00000000-0000-0000-0000-000000000002");
Patient(Guid "00000000-0000-0000-0000-000000000003");
]).AsQueryable()
let mockPatSet = Mock<DbSet<Patient>>.With(fun x ->
<@
// This is where things go wrong. x doesn't have a property Provider
x.Provider --> patients.Provider
@>
)
我尝试在某些地方强制和强制转换x
,IQueryable
但这不起作用。
正如您在文档中看到DbSet
的那样,它确实通过实现IQueryable
接口DbQuery
,但通过“显式”实现属性来实现。
在Moq中有一个函数As
,因此您可以告诉它将其视为IQueryable
如下所示:
var mockSet = new Mock<DbSet<Blog>>();
mockSet.As<IQueryable<Blog>>().Setup(m => m.Provider).Returns(data.Provider);