Не удается создать экземпляр прокси класса: Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry - PullRequest
0 голосов
/ 16 ноября 2018

В моем репо есть метод, который вызывает метод datacontext.Add и возвращает resutl.Entity, например:

 var result =  _dataContext.Product.Add(product);
 await _dataContext.SaveChangesAsync();
 return result.Entity;

Теперь я хочу создать макет для EntityEntry<Product>, но получаю исключение:

Сообщение: Castle.DynamicProxy.InvalidProxyConstructorArgumentsException: Невозможно создать экземпляр прокси-сервера класса: Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry`1 [[Product, Product.Entities, Version = 1.0.0.0, Culture = нейтральный,PublicKeyToken = NULL]].Не удалось найти конструктор без параметров.

Вот мой код метода тестирования:

 var productMock = new Mock<EntityEntry<Product>>();
 var entity = new Product{Id = 1, Name = "Bag"};
 mappingMock.Setup(m => m.Entity).Returns(entity);
 var dataContextMock = new Mock<DataContext>(_options);
 var productMockSet = new Mock<DbSet<Product>>();
 dataContextMock.Setup(a => a.Product)
     .Returns(productMockSet.Object);
 dataContextMock.Setup(m => m.Product.Add(It.IsAny<Product>())).Returns(productMock.Object);

Что я делаю не так?или есть ли другой способ Assert EntityEntry?

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, вам не хватает этих насмешливых объектов:

var iStateManager = new Mock<IStateManager>();
var model = new Mock<Model>();

var productEntityEntry = new Mock<EntityEntry<Product>>(
new InternalShadowEntityEntry(iStateManager.Object, new EntityType("Product", model.Object, ConfigurationSource.Convention)));

productEntityEntry.SetupGet(m=> m.Entity).Returns(entity);
...