Как издеваться над LocalView <TEntity> - PullRequest
0 голосов
/ 21 января 2019

В моем коде я проверяю свойство Local объекта DbSet, чтобы увидеть, какие объекты уже добавлены в DbContext, но еще не зафиксированы в базе данных. Теперь мне нужно смоделировать это свойство, но может показаться, что я не могу. Это означает, что когда я тестирую свой код, он терпит неудачу, потому что свойство Local имеет значение null. Есть идеи, как я могу это сделать? Я добавил код, который в настоящее время использую для генерации фиктивного dbset ниже, и он включает в себя код для генерации LocalView, но это происходит с NotImplementedException () при вызове конструктора.

Я использую последнюю версию .Net Core и Entity Framework.

Приветствие Mark

var localDbSet = new Mock<DbSet<TEntity>>();
var localList = new List<TEntity>().AsQueryable();
var mockDbSet = new Mock<DbSet<TEntity>>();
var queryableData = list.AsQueryable();

localDbSet.As<IQueryable<TEntity>>().Setup(m => m.Provider).Returns(localList.Provider);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.Expression).Returns(localList.Expression);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.ElementType).Returns(localList.ElementType);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.GetEnumerator()).Returns(localList.GetEnumerator());

mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.Provider).Returns(queryableData.Provider);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.Expression).Returns(queryableData.Expression);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.ElementType).Returns(queryableData.ElementType);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.GetEnumerator()).Returns(queryableData.GetEnumerator());
mockDbSet.Setup(d => d.Add(It.IsAny<TEntity>()));

// This fails with a NotImplementedException
var localView = new LocalView<TEntity>(localDbSet.Object);
mockDbSet.Setup(d => d.Local).Returns(localView);
...