【发布时间】:2017-09-08 05:27:30
【问题描述】:
我通过以下代码模拟了 FindAsync:
var brands = new Mock<DbSet<Brand>>();
ConfigureTheDbSet(brands, brandData);
brands.Setup(b => b.FindAsync(It.IsAny<object[]>())) //substitution of the .SelectAsync(id) method
.Returns<object[]>(ids => brands.Object.FirstOrDefaultAsync(b => b.BrandId == (int) ids[0]));
在我将 AsNoTracking 的模拟添加到上下文之前,它一直正常工作:
var mockContext = new Mock<ReportDbContext>();
mockContext.Setup(m => m.Set<Brand>()).Returns(brands.Object);
mockContext.Setup(m => m.Set<Brand>().AsNoTracking()).Returns(brands.Object);
而 FindAsync 返回 null。为了使它工作,我添加了以下模拟:
mockContext.Setup(m => m.Set<Brand>().FindAsync(It.IsAny<object[]>()))
.Returns<object[]>(async d => await brands.Object.FindAsync(d));
有人知道为什么会这样吗?
【问题讨论】:
标签: c# .net entity-framework unit-testing moq