System.NotSupportedException: неверная установка для не виртуального (переопределяемого в VB) члена

Я получаю сообщение об ошибке NotSupportedException в модульном тесте с использованием Moq

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);

Предложение в этом посте говорит, чтобы пометить его как virtual, но я не уверен, что нужно пометить как виртуальный?

Ошибка происходит в этой строке:

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

2 ответа

Решение

Предполагая, что вы используете EF как минимум V6 и основаны на этом примере (посмотрите на элемент Blogs), который делает с вами нечто очень похожее. Я предполагаю, что ваша проблема в том, что ваш dataAccessчто бы это ни было, не объявлять Stocks как виртуальный.

Так это должно выглядеть примерно так:

public virtual DbSet<Stock> Stocks { get; set; } 

Свойство или функция, которые вы пытаетесь настроить, должны быть объявлены как

public virtual

в противном случае Moq не может создать унаследованный класс, который переопределяет эту функцию или свойство, что необязательно, когда вы хотите его настроить.

Другие вопросы по тегам