虽然嘲笑我的ApplictionDbContext方法有错误AddOrUpdate.
DbSet 在上下文中是虚拟的.
测试方法:
this.db.ExpensesDocuments.AddOrUpdate(doc);
Run Code Online (Sandbox Code Playgroud)
我的测试方法:
[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
}
Run Code Online (Sandbox Code Playgroud)
错误:
结果消息:System.InvalidOperationException:无法在派生的IDbSet类型'Castle.Proxies.DbSet`1Proxy'上调用public,实例方法AddOrUpdate.找不到方法.
我正在使用Moq4框架进行模拟和xUnit测试.
小智 6
AddOrUpdate扩展方法如下所述:
"调用SaveChanges时按键添加或更新实体.相当于数据库术语中的"upsert"操作.当使用Migrations播种数据时,此方法很有用.
我在试图嘲笑这个时发现我实际上完全错了.关于"播种时有用"的一点让我思考.您无需调用此方法来更新实体对象.只要从上下文中获取了对象,SaveChanges()就可以完成.
可能不是你希望的答案(并且迟到6个月),但也许其他人会重新考虑他们对这种方法的使用.
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |