在模仿我的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
进行测试。
答案 0 :(得分:6)
AddOrUpdate扩展方法如下所示:
&#34;调用SaveChanges时按键添加或更新实体。相当于&#34; upsert&#34;数据库术语的操作。当使用迁移播种数据时,此方法非常有用。&#34;
我试图嘲笑这个时发现我实际上完全错了。关于播种时的有用信息&#34;让我思考。您不需要调用它来更新实体对象。只要你从上下文中获取了对象,SaveChanges()就可以解决问题。
可能不是您希望的答案(并且延迟6个月),但也许其他人会重新考虑他们对该方法的使用。