我想了解为什么我的模拟dbset在调用NullReferenceException
时抛出dbContext.Object.Locations.FirstOrDefault(x => x.Id == id);
我已经设置了我的模拟dbset,详情如下:
public Mock<DbSet<T>> GetMockDbSet<T>(string path) where T : class
{
var data = GetObjectList<T>(path).AsQueryable();
var mockSet = new Mock<DbSet<T>>();
mockSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(()=>data.GetEnumerator());
return mockSet;
}
private Mock<DbContext> LoadMockDataBase(ref Dictionary<string, object> mockDictionary)
{
var mockSetLocations = GetMockDbSet<Repository.Location>(@"Files/ObjectJson/Locations.json");
dbContext.Setup(l => l.Locations).Returns(mockSetLocations.Object);
dbContext.Setup(x => x.Locations.AsNoTracking()).Returns(mockSetLocations.Object);
return dbContext;
}
我理解,如果我删除AsNoTracking()
这会解决问题,但我不想限制应用程序不使用AsNoTracking
只是为了在逻辑正确时传递测试。