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。