起订量 DbSet NotImplementedException
Moq DbSet NotImplementedException
我有一个 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.
回滚 Castle.Core 到 4.0.0 和 Moq 到支持 4.0.0 的最新版本解决了这个问题。我仍然想知道是否有我遗漏的东西可以在新版本中解决这个问题。
您可能一直在使用 4.7.58 版的 Moq。该特定版本在 4.7.63 版中受到 a regression that would have triggered such a NotImplementedException
. That regression has been fixed 的影响,因此我建议您 将您的 Moq 包引用更新为 4.7.63 版或更高版本 以解决此问题。
您的代码在 4.7.58 之前的 Moq 版本中可以正常工作是由于 "feature" 不幸的是,它造成的问题比解决的问题多得多。因此,该功能 was reverted.
Moq 已恢复到其原始行为,在此特定情况下,您需要 通过 mock.As<TInterface>
before[=] 设置各种接口成员25=] 调用 mock.Object
。 (通常,在 Moq 中,即使在检索模拟对象后执行更多设置也完全没问题;这种情况是一个值得注意的例外。希望这可以在 Moq 的未来版本中得到修复。)
我有一个 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.
回滚 Castle.Core 到 4.0.0 和 Moq 到支持 4.0.0 的最新版本解决了这个问题。我仍然想知道是否有我遗漏的东西可以在新版本中解决这个问题。
您可能一直在使用 4.7.58 版的 Moq。该特定版本在 4.7.63 版中受到 a regression that would have triggered such a NotImplementedException
. That regression has been fixed 的影响,因此我建议您 将您的 Moq 包引用更新为 4.7.63 版或更高版本 以解决此问题。
您的代码在 4.7.58 之前的 Moq 版本中可以正常工作是由于 "feature" 不幸的是,它造成的问题比解决的问题多得多。因此,该功能 was reverted.
Moq 已恢复到其原始行为,在此特定情况下,您需要 通过 mock.As<TInterface>
before[=] 设置各种接口成员25=] 调用 mock.Object
。 (通常,在 Moq 中,即使在检索模拟对象后执行更多设置也完全没问题;这种情况是一个值得注意的例外。希望这可以在 Moq 的未来版本中得到修复。)