![](/img/trans.png)
[英]FirstOrDefault returns NullReferenceException if no match is found
[英]Mock FirstOrDefault returns NullReferenceException
我想了解为什么当我调用dbContext.Object.Locations.FirstOrDefault(x => x.Id == id);
时我的模拟dbset抛出NullReferenceException
dbContext.Object.Locations.FirstOrDefault(x => x.Id == id);
我已经设置了我的模拟数据库集,如下所示:
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
只是为了在逻辑正确时通过测试。
这解决了问题。 对于将来在AsNoTracking()或FirstOrDefault()返回NUllException的问题的任何人。
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());
mockSet.Setup(x => x.AsNoTracking()).Returns(mockSet.Object);
return mockSet;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.