无法调用公共实例方法AddOrUpdate,mocking
在AddOrUpdate
我的AddOrUpdate
我在方法AddOrUpdate
上遇到错误。
上下文中的DbSet
是虚拟的。
测试方法:
this.db.ExpensesDocuments.AddOrUpdate(doc);
我的测试方法:
[Fact] public void AddOrUpdateExpenses_Success() { // arrange var mockSet = new Mock<DbSet>(); var mockContext = new Mock(); mockContext.Setup(m => m.ExpensesDocuments).Returns(mockSet.Object); var provider = new ExpensesProvider(mockContext.Object); // act bool result = provider.AddOrUpdateExpenses(new ExpensesDocument()); // assert }
错误:
结果消息:System.InvalidOperationException:无法在派生的IDbSet类型’Castle.Proxies.DbSet`1Proxy’上调用public,实例方法AddOrUpdate。 找不到方法。
我使用Moq4
框架进行Moq4
,使用xUnit
进行测试。
AddOrUpdate扩展方法如下所述:
“在调用SaveChanges时按键添加或更新实体。相当于数据库术语中的”upsert“操作。当使用Migrations播种数据时,此方法很有用。
我发现在试图模仿这个时,我实际上使用它完全错了。 关于“播种时有用”的一点让我思考。 您无需调用此方法来更新实体对象。 只要你从上下文中获取了对象,SaveChanges()就可以解决问题。
可能不是你希望的答案(并且延迟6个月),但也许其他人会重新考虑他们对该方法的使用。