Moq和Find表达式 - 空参考例外

时间:2015-02-17 15:55:53

标签: c# linq moq

我正在摆弄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);

任何线索?

1 个答案:

答案 0 :(得分:2)

我假设你的MyInterface继承了IQueryable。 然后,当您在其上调用SingleOrDefault时,它会在提供的实例上调用IQueryable.Provider属性。

由于您尚未模拟IQueryable.Provider属性,因此它会从模拟中重新生成null,因此您已获得NullReferenceException。

尝试设置MockBehavior.Strict以查看是否是原因。