如何模拟LocalView <tentity>

时间:2019-01-21 11:58:43

标签: c# entity-framework-core moq

在我的代码中,我检查了DbSet的Local属性,以查看哪些实体已添加到DbContext中,但尚未提交给数据库。现在,我需要模拟该属性,但看来我做不到。这意味着当我测试代码时,它会失败,因为Local属性为null。有什么想法可以做到吗?我在下面添加了当前用于生成模拟dbset的代码,其中包括用于生成LocalView的代码,但是在调用构造函数时,此操作失败,并显示NotImplementedException()。

我正在使用最新版本的.Net Core和Entity Framework。

欢呼 标记

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);

0 个答案:

没有答案