模拟FirstOrDefault返回NullReferenceException

时间:2015-12-21 12:11:45

标签: c# asp.net unit-testing mocking moq

我想了解为什么我的模拟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只是为了在逻辑正确时传递测试。

0 个答案:

没有答案