![](/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.