Я возился с Moq, и я не могу понять, почему следующее доказательство правильности концепции сниппет бросает NullReferenceException
при доступе к mock.Object.SingleOrDefault
:Moq и найти выражения - Null Reference Исключение
var myObject = new MyObject() { Id = 1, Name = "Name" };
var mock = new Mock<MyInterface<MyObject>>();
mock
.Setup(t => t.Find(It.IsAny<Expression<Func<MyObject, bool>>>()))
.Returns(myObject);
var mySecondObject = mock.Object.SingleOrDefault(a => true);
Assert.AreEqual(myObject, mySecondObject);
Любые подсказки ?
Вы не установили 'SingleOrDefault', почему вы ожидаете вернуть что-то другое в null? Вы хотели использовать 'Find'? –
Я пробовал это, но получил другое исключение: NotSupportedExceptoin: "Дополнительная информация: выражение ссылается на метод, который не принадлежит к издеваемому объекту:" – mo5470
@ClaudioRedi Mock может настраивать только виртуальные экземпляры экземпляра типа (в этом случае на 'MyInterface <>'). Но 'SingleOrDefault' - это метод расширения Linq. Скорее всего, это статический метод 'Enumerable.SingleOrDefault' или' Queryable.SingleOrDefault'. –