无法调用公共实例方法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个月),但也许其他人会重新考虑他们对该方法的使用。