gpt4 book ai didi

c# - 如何模拟多个级别的 DbSet.Include lambda?

转载 作者:行者123 更新时间:2023-11-30 16:54:05 25 4
gpt4 key购买 nike

我正在使用 Moq 编写使用 Entity Framework 6 的单元测试 DbSetDbContext对象。我有一个级联/多级服务方法 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) 中得到一个空引用异常.如何设置起订量以处理多个级别的 Include

编辑
好的,事实证明我不能使用 It.IsAny<string>对于 Include使用 lambdas 而不是字符串的调用,所以现在我有两个问题:

  1. 如何使用接受 lambda 的 Include 设置模拟?
  2. 上述设置是否会级联到多个级别?

最佳答案

include()是一个静态方法(扩展方法)。 Moq不支持静态方法模拟(read this link)。

要测试您的代码,您需要设置 mockCarDbSet返回 IQueryable<Car> :

var carQuery = new List<Car>
{
//add cars
}
IQueryable<Post> query = carQuery.AsQueryable();

返回query由于 DataContext.Cars

这些步骤将解决静态方法问题。

关于c# - 如何模拟多个级别的 DbSet.Include lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com