FoqDbSet
を使用してエンティティ フレームワークをモックしたかったのです。次のようになります。
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
ません。
hereのドキュメントでわかるように、を介してインターフェイスをDbSet
実装していますが、プロパティを「明示的に」実装することで実装しています。IQueryable
DbQuery
Moqには Function があるためAs
、次のように扱うように指示できますIQueryable
。
var mockSet = new Mock<DbSet<Blog>>();
mockSet.As<IQueryable<Blog>>().Setup(m => m.Provider).Returns(data.Provider);