我正在摆弄Moq,我无法弄清楚为什么以下概念验证片段在访问NullReferenceException
时会抛出mock.Object.SingleOrDefault
:
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);
任何线索?
答案 0 :(得分:2)
我假设你的MyInterface继承了IQueryable。 然后,当您在其上调用SingleOrDefault时,它会在提供的实例上调用IQueryable.Provider属性。
由于您尚未模拟IQueryable.Provider属性,因此它会从模拟中重新生成null,因此您已获得NullReferenceException。
尝试设置MockBehavior.Strict以查看是否是原因。