Dan*_*yak 5 c# entity-framework moq dbset
我有一个 Moq DbSet,直到最近一直在工作,但是自从上次更新依赖项以来,它一直在抛出一个NotImplementedException
onIQueryable.Provider
使用的代码如下:
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
Run Code Online (Sandbox Code Playgroud)
抛出的异常如下:
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.
Run Code Online (Sandbox Code Playgroud)
您可能一直在使用 Moq 4.7.58 版本。该特定版本受到了回归的影响,该回归可能会触发此类NotImplementedException
. 该回归已在版本 4.7.63 中修复,因此我建议您将 Moq 包引用更新为版本 4.7.63 或更高版本以解决此问题。
事实上,您的代码可以在 4.7.58 之前的 Moq 版本中运行,这是由于一个“功能”,不幸的是,该功能导致的问题比它解决的问题多得多。因此,该功能已恢复。
Moq 已恢复到其原始行为,在这种特定情况下,您需要在调用mock.As<TInterface>
mock.Object
. (通常,在 Moq 中,即使在检索模拟对象之后执行更多设置也是完全可以的;这种情况是一个值得注意的例外。希望这可以在 Moq 的未来版本中修复。)
归档时间: |
|
查看次数: |
2538 次 |
最近记录: |