我想用DbSet来模拟实体框架。它是这样的:
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文档中看到的那样,它确实通过DbQuery实现了IQueryable接口,但是通过“显式”实现属性来实现。
在莫克中有一个函数As,所以您可以告诉它把它当作一个看起来像:
var mockSet = new Mock<DbSet<Blog>>();
mockSet.As<IQueryable<Blog>>().Setup(m => m.Provider).Returns(data.Provider); 发布于 2015-03-04 08:02:18
Foq (1.7)的最新版本现在支持使用Mock.As方法实现多个接口,类似于Moq中的设置。
type IFoo =
abstract Foo : unit -> int
type IBar =
abstract Bar : unit -> int
[<Test>]
let ``can mock multiple interface types using setup`` () =
let x =
Mock<IFoo>().Setup(fun x -> <@ x.Foo() @>).Returns(2)
.As<IBar>().Setup(fun x -> <@ x.Bar() @>).Returns(1)
.Create()
Assert.AreEqual(1, x.Bar())
Assert.AreEqual(2, (x :?> IFoo).Foo())https://stackoverflow.com/questions/28026005
复制相似问题