Макет DbContext.Функция ввода?

#c# #.net-core #entity-framework-core #nunit #moq

#c# #.net-ядро #сущность-фреймворк-ядро #nunit #moq

Вопрос:

Во время модульного тестирования я издевался над классом репозитория и хочу модульно протестировать метод обновления, который содержит менее двух строк кода:

 _dIContext.Entry(originalModel).CurrentValues.SetValues(processModel);
_dIContext.Entry(originalModel).State = EntityState.Modified;
  

в первой строке я получаю исключение NullReferenceException.

Ниже приведен мой метод настройки класса модульного тестирования:

 _mockContext = new Mock<ContextClass>(null);
processModels = CreateProcessModelList();
mockDbSet = new Mock<DbSet<ProcessModel>>();
mockDbSet.As<IQueryable<ProcessModel>>().Setup(m => m.Provider).Returns(processModels.AsQueryable().Provider);
mockDbSet.As<IQueryable<ProcessModel>>().Setup(m => m.Expression).Returns(processModels.AsQueryable().Expression);
mockDbSet.As<IQueryable<ProcessModel>>().Setup(m => m.ElementType).Returns(processModels.AsQueryable().ElementType);
mockDbSet.As<IQueryable<ProcessModel>>().Setup(m => m.GetEnumerator()).Returns(processModels.AsQueryable().GetEnumerator());
_mockContext.Setup(x => x.ProcessModels).Returns(mockDbSet.Object);
_repository = new ProcessRepository(_mockContext.Object);
  

Кто-нибудь может поправить меня, если мой код неправильный?

Комментарии:

1. Похоже, вы не настраиваете dbcontext.entry и т.д. Есть ли причина, по которой вы не просто используете поставщика в памяти?

2. Нет, не конкретная причина. Встроенная память работает хорошо, когда я пытался, но предложение от члена команды сделать это таким образом.

3. Вы делаете что-нибудь еще в репозитории с dbcontext? Например, сохранить изменения?

4. Нет, сэр, приведенный код касается всего.