【发布时间】:2016-02-04 22:31:13
【问题描述】:
在模拟我的 ApplictionDbContext 时,我在方法 AddOrUpdate 上遇到错误。
DbSet 在上下文中是虚拟的。
待测方法:
this.db.ExpensesDocuments.AddOrUpdate(doc);
我的测试方法:
[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
}
错误:
结果消息:System.InvalidOperationException:无法调用 派生 IDbSet 类型上的公共实例方法 AddOrUpdate 'Castle.Proxies.DbSet`1Proxy'。找不到方法。
我使用Moq4 框架进行模拟,使用xUnit 进行测试。
【问题讨论】:
-
就您的代码显示而言,您似乎没有设置该方法。会这样吗?
-
AddOrUpdate是扩展方法,而不是DbSet的方法。见msdn.microsoft.com/en-us/library/hh846520(v=vs.103).aspx你不能这样拦截它。尝试重写测试。 -
是的,我知道它是扩展方法,但我该如何处理呢?
标签: c#