【发布时间】:2014-04-22 15:31:35
【问题描述】:
我想知道是否有人对 FakeItEasy 的 post 有类似的示例(原始帖子是 here。我一直在尝试找到正确的设置,但无法正确设置。我找不到任何示例在线。我开始自学单元测试,我决定使用 FakeItEasy。到目前为止,我所有的项目都使用实体框架并且不使用 Repository/UOW 模式,因为我认为 DbSet 和 DbContext 对于我的小型应用程序来说已经足够好了。我了解 EF 和单元测试的优缺点,但我仍然想弄清楚这一点。我很确定我的尝试已经完成(见下文),因为我得到的错误是
System.NotImplementedException:成员“IQueryable.Provider”有 未在类型“DbSet
1Proxy' which inherits from 'DbSet1”上实现。 'DbSet`1' 的测试替身必须提供 使用的方法和属性。
任何方向都会非常有帮助。谢谢。
var data = new List<Request>
{
request1,
request2,
request3
}.AsQueryable();
var fakeDbSet = A.Fake<DbSet<Request>>();
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Provider).Returns(data.Provider);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Expression).Returns(data.Expression);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).ElementType).Returns(data.ElementType);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).GetEnumerator()).Returns(data.GetEnumerator());
var fakeContext = A.Fake<RequestPortalContext>();
A.CallTo(() => fakeContext.Requests).Returns(fakeDbSet);
var service = new RequestReadService(fakeContext);
var requests = service.GetAllRequests();
Assert.AreEqual(3, requests.Count);
Assert.AreEqual("Test1", requests[0].Name);
Assert.AreEqual("Test2", requests[1].Name);
Assert.AreEqual("Test3", requests[2].Name);
【问题讨论】:
标签: unit-testing dbcontext entity-framework-6 fakeiteasy dbset