簡體   English   中英

模擬FirstOrDefault返回NullReferenceException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM