【发布时间】:2015-06-15 16:23:10
【问题描述】:
我正在使用 Moq 编写使用 Entity Framework 6 DbSet 和 DbContext 对象的单元测试。我有一个带有级联/多级Include 的服务方法,但我不知道如何设置它以进行测试。服务方法如下所示:
return DataContext.Cars
.Include(p => p.Model)
.Include(p => p.Model.Make)
.Select(c => new
{
Key = c.CarId,
Value = string.Format("{0} {1} {2}", c.Model.Make.Name, c.Model.Name, c.Trim)
}
).ToArray();
我知道我必须设置 Include 来返回模拟对象,如下所示:
mockCarDbSet.Setup(m => m.Include(It.IsAny<string>())).Returns(mockCarSet.Object);
但是我从级联的.Include(p => p.Model.Make) 中得到一个空引用异常。如何设置 Moq 以处理多个级别的Include?
编辑
好的,事实证明我不能将It.IsAny<string> 用于使用lambdas 而不是字符串的Include 调用,所以现在我有两个问题:
- 如何使用 Include 设置一个接受 lambda 的模拟?
- 上述设置是否会级联到多个级别?
【问题讨论】:
标签: c# entity-framework unit-testing mocking moq