我有一个 Moq 的 DbSet,在最近更新依赖项后一直工作正常,但现在调用 IQueryable.Provider
时抛出了一个 NotImplementedException
异常。
代码如下:
var mockSet = new Mock<DbSet<A>>();
var list = new List<A>();
var queryable = list.AsQueryable();
mockSet.As<IQueryable<A>>().Setup(m => m.Provider).Returns(queryable.Provider);
mockSet.As<IQueryable<A>>().Setup(m => m.Expression).Returns(queryable.Expression);
mockSet.As<IQueryable<A>>().Setup(m => m.ElementType).Returns(queryable.ElementType);
mockSet.As<IQueryable<A>>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator());
var f =mockSet.Object.FirstOrDefault(); // NotImplementedException thrown here
以下是抛出的异常:
System.NotImplementedException
The member 'IQueryable.Provider' has not been implemented on type
'DbSet`1Proxy_1' which inherits from 'DbSet`1'.
Test doubles for 'DbSet`1' must provide implementations of methods
and properties that are used.
Sqlite
内存数据库将提供更好的测试体验,因为您不会受到如何构建查询的限制。只需插入所需数据,运行查询,检查预期结果即可。 - Fabio