System.NotSupportedException:非虚拟(在VB中可覆盖)成员上的无效设置

我使用Moq在unit testing中收到NotSupportedException错误消息

System.NotSupportedException:非虚拟(在VB中可覆盖)成员上的无效设置

unit testing代码:

[TestMethod] public void TestEmailNotSentOut() { // ... var dataAccess = new Mock(); var mockSetStock = new Mock<DbSet>(); mockSetStock.As<IQueryable>().Setup(m => m.Provider).Returns(stockList.Provider); mockSetStock.As<IQueryable>().Setup(m => m.Expression).Returns(stockList.Expression); mockSetStock.As<IQueryable>().Setup(m => m.ElementType).Returns(stockList.ElementType); mockSetStock.As<IQueryable>().Setup(m => m.GetEnumerator()).Returns(stockList.GetEnumerator()); dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object); 

这篇文章中的一个建议是将其标记为virtual ,但我不确定需要将哪些标记为虚拟?

错误发生在此行:

  dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object); 

假设您正在使用至少为V6的EF并且基于此示例 (请查看Blogs元素),这对您做的事情非常类似。 我猜你的问题是你的dataAccess ,无论它是什么都不会将Stocks声明为虚拟。

所以看起来应该是这样的:

 public virtual DbSet Stocks { get; set; } 

您尝试设置的属性或function需要声明为

 public virtual 

否则Moq无法创建一个inheritance的类,当你想要设置它时,它会覆盖这个函数或propterty,这是nessecary。