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 не может создать унаследованный класс, который переопределяет эту функцию или свойство, что необязательно, когда вы хотите его настроить.