无法调用公共实例方法AddOrUpdate,mocking

时间:2015-07-10 09:47:59

标签: c#

在模仿我的5S_rRNA 1324 571 5_8S_rRNA 32 11 7SK 15 5 ACA59 0 0 ACA64 0 0 BC040587 0 0 CDKN2B-AS 0 0 CDKN2B-AS_2 0 0 CDKN2B-AS_3 0 0 CLRN1-AS1 0 0 时,我在方法ApplictionDbContext上收到了错误。

上下文中的

AddOrUpdate是虚拟的。

根据测试方法:

DbSet

我的测试方法:

this.db.ExpensesDocuments.AddOrUpdate(doc);

错误:

  

结果消息:System.InvalidOperationException:无法调用   public,实例方法AddOrUpdate派生的IDbSet类型   'Castle.Proxies.DbSet`1Proxy'。找不到方法。

我使用[Fact] public void AddOrUpdateExpenses_Success() { // arrange var mockSet = new Mock<DbSet<ExpensesDocument>>(); var mockContext = new Mock<ApplicationDbContext>(); mockContext.Setup(m => m.ExpensesDocuments).Returns(mockSet.Object); var provider = new ExpensesProvider(mockContext.Object); // act bool result = provider.AddOrUpdateExpenses(new ExpensesDocument()); // assert } 框架进行模拟,使用Moq4进行测试。

1 个答案:

答案 0 :(得分:6)

AddOrUpdate扩展方法如下所示:

&#34;调用SaveChanges时按键添加或更新实体。相当于&#34; upsert&#34;数据库术语的操作。当使用迁移播种数据时,此方法非常有用。&#34;

我试图嘲笑这个时发现我实际上完全错了。关于播种时的有用信息&#34;让我思考。您不需要调用它来更新实体对象。只要你从上下文中获取了对象,SaveChanges()就可以解决问题。

可能不是您希望的答案(并且延迟6个月),但也许其他人会重新考虑他们对该方法的使用。