【发布时间】:2015-09-05 07:56:28
【问题描述】:
我在使用 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);
this post 中的建议说将其标记为virtual,但我不确定需要将什么标记为虚拟?
错误发生在这一行:
dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);
【问题讨论】:
-
您在哪一行收到此错误?
-
根据您的代码,您似乎正在使用实体框架。如果是这样,有问题的行是 ׳dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);׳。你不能用 ׳Moq׳ 伪造这条线。 (我相信 dataAccess 是 StocksModelContext : DbContext{ public DbSet
Stocks{ get; set; } }) -
错误发生在dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);我正在使用 EntityFramework var dataAccess = new Mock
();公共 DbSet 股票 { 获取;放;那么该行是否可以更改,或者我是否需要在不使用 Moq 的情况下找到另一种测试方法?
标签: c# unit-testing moq