Я установил mock dbset, который читает кучу json-файлов и десериализует их в макет dbset. Я добавил AsNoTracking к моей переменной по двум причинам: 1) Я буду хранить новый объект в db и не нужно отслеживать объект, так как это обновляет запись. 2) Производительность.Mock unit test возвращает ArgumentNullException в AsNoTracking()
Код работает отлично, однако издевательство не работает, так как я добавил метод AsNoTracking(), чтобы не сохранять результат в кеше dbcontext. Теперь это возвращает ArgumentNullException. Если я удалю AsNoTracking, проходит тест, однако я не хочу, чтобы меня вынуждали удалить AsNoTracking просто для прохождения модульных тестов.
При отладке моего блока тестирует он бросает ArugmentNullException здесь:
var myObj = dbContext.MyTable.AsNoTracking().Where(b => b.Id == param.Id).Include(b => b.Column1).Include(b => b.Column2).Include(b => b.Colum3).FirstOrDefault();
Однако, если запустить через браузер это работает отлично, данные возвращаются правильно, объект не является нулевым.
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;
}
Что я могу сделать для приведенного выше кода, так что результат не является нулевым, если AsNoTracking() добавляется переменная, где объекты возвращаются из dbset.
См. Также http://stackoverflow.com/questions/27038253/mock-asnotracking-entity-framework (несколько более ясный IMO). –