Moq DbSet NotImplementedException
我有一个直到最近一直工作的Moq DbSet,但是自上次更新依赖项以来,它一直在IQueryable.Provider
NotImplementedException
。
代码使用如下:
var mockSet = new Mock<DbSet>(); var list = new List(); var queryable = list.AsQueryable(); mockSet.As<IQueryable>().Setup(m => m.Provider).Returns(queryable.Provider); mockSet.As<IQueryable>().Setup(m => m.Expression).Returns(queryable.Expression); mockSet.As<IQueryable>().Setup(m => m.ElementType).Returns(queryable.ElementType); mockSet.As<IQueryable>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator()); var f =mockSet.Object.FirstOrDefault(); // NotImplementedException thrown here
引发的exception如下:
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.
您可能使用的是Moq版本4.7.58。 该特定版本受到可能触发此类NotImplementedException
的回归的影响。 该回归已在版本4.7.63中修复,因此我建议您将Moq软件包参考更新为4.7.63或更高版本以解决此问题。
你的代码在4.7.58之前的Moq版本中工作的事实是由于一个“function”,不幸的是它导致了比它解决的问题更多的问题。 出于这个原因,该function被还原 。
Moq已经恢复原状,在这种特殊情况下,您需要通过mock.As
设置各种接口成员, 然后再调用mock.Object
。 (通常,在Moq中,即使在检索模拟对象之后执行更多设置也完全没问题;这种情况是一个值得注意的例外。希望这可以在Moq的未来版本中修复。)
将Castle.Core回滚到4.0.0并将Moq回滚到支持4.0.0的最新版本解决了这个问题。 我仍然想知道是否有一些我错过的东西可以解决新版本中的这个问题。
- 更新XAttribute值,其中XAttribute Name = X.
- C#将字符串转换为其byte 等价物
- 无法使用Headers =“application / x-www-form-urlencoded”编码我的JSON对象insdie我的WebClient UploadString
- 如何在运行时检查引用的程序集是否可用?
- 从另一个页面获取代码隐藏中的ASP.Net页面的URL
- 如何调用Dictionary .TryGetValue()其中K:Predicate ,V:enum
- 使用FtpWebRequest上传文件时获取“无效的URL”
- c#treeview忽略仅双击复选框
- C#WCF插件的设计和实现