2015-12-14 3 views
4

Я установил 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.

ответ

3

Я нашел ответ. Это может быть достигнуто путем насмешливый asnotracking вернуть набор вы хотите, следующим образом:

Я насмешливо EntityA, когда я все десериализации и насмешливый на установке я дразнить AsNoTracking:

Пример:

entityA.Setup(x => x.AsNoTracking()).Returns(entityA.Object); 
+0

См. Также http://stackoverflow.com/questions/27038253/mock-asnotracking-entity-framework (несколько более ясный IMO). –