【发布时间】:2014-08-11 13:55:05
【问题描述】:
我在运行测试时收到此错误:System.NotImplementedException : The member 'IQueryable.Provider' has not been implemented on type 'DbSet' ...' 我在创建 fakeDbSet 时看到了 this blog post,但那是在 EF6 之前。有没有更好的方法来使用 EF 6 处理这个问题?
[Test]
public void Edit_ShouldCall_DbContext_Entry()
{
//arrange
var request = Builder<EditGroupRequest>.CreateNew().Build();
fakeDbSet.Stub(x => x.FirstOrDefault(y => y.ReportGroupNameKey == request.Key)).Return(new MyObject());
//act
_sut.Edit(request);
//assert
_contextFake.AssertWasCalled(x => x.Entry(Arg<MyObject>.Is.Anything).Property(y => y.ReportGroupName).CurrentValue = request.Name);
}
【问题讨论】:
-
无论 EF 版本如何,该链接的原理都保持不变。使用暴露
IDbSet<>属性的IMyContext接口并将其模拟为FakeDbSet<> -
@AlexG 所以我需要创建 Get IQueryably 表达式的实现,并让 mock 处理非查询相关的方法?
标签: unit-testing dbset