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

Fra*_*zer 2 c# unit-testing moq

我使用Moq在单元测试中收到NotSupportedException错误消息

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

单元测试代码:

[TestMethod]
public void TestEmailNotSentOut()
{
  // ...

  var dataAccess = new Mock<TjiContext>();       
  var mockSetStock = new Mock<DbSet<Stock>>();
  mockSetStock.As<IQueryable<Stock>>().Setup(m => m.Provider).Returns(stockList.Provider);
  mockSetStock.As<IQueryable<Stock>>().Setup(m => m.Expression).Returns(stockList.Expression);
  mockSetStock.As<IQueryable<Stock>>().Setup(m => m.ElementType).Returns(stockList.ElementType);
  mockSetStock.As<IQueryable<Stock>>().Setup(m => m.GetEnumerator()).Returns(stockList.GetEnumerator());
  dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);
Run Code Online (Sandbox Code Playgroud)

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

错误发生在此行:

  dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);
Run Code Online (Sandbox Code Playgroud)

for*_*rir 7

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

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

public virtual DbSet<Stock> Stocks { get; set; } 
Run Code Online (Sandbox Code Playgroud)