本文介绍了System.NotSupportedException:在非虚拟(在VB中可重写)成员上的无效设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用Moq在单元测试中收到一条NotSupportedException错误消息
I am getting a NotSupportedException error message on my Unit Test using Moq
单元测试代码:
[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);
此帖子中的建议说将其标记为virtual
,但我不确定需要将哪些标记为虚拟?
A suggestion in this post says to mark it as virtual
, but I'm not sure what needs to be marked as virtual?
此行发生错误:
dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);
推荐答案
假设您使用的是至少为V6的EF,并且基于此示例(请参阅Blogs元素),它与您的操作非常相似.我想您的问题是您的dataAccess
,无论它是什么,都不会将Stocks
声明为虚拟.
Assuming you're using EF of at least V6 and based on this example (look at the Blogs element) which is doing a very similar thing to you. I'd guess that your problem is that your dataAccess
, whatever it is doesn't declare Stocks
as virtual.
所以它应该看起来像这样:
So it should look something like this:
public virtual DbSet<Stock> Stocks { get; set; }
这篇关于System.NotSupportedException:在非虚拟(在VB中可重写)成员上的无效设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!