如何用where谓词模拟LinqQuery

本文关键字:模拟 LinqQuery 谓词 where 何用 | 更新日期: 2023-09-27 18:22:02

下面是会议信息类型的listOfMeetings

它将返回参与者类型。

如何用moq模拟下面的查询?

listOfMeetings.Where(x => x.MeetingURI == meeting.MeetingUrl)
    .FirstOrDefault().Participants;

如何用where谓词模拟LinqQuery

创建一个列表来存储测试数据,然后将mock设置为IQuerable,将其映射到测试数据。

var meetingData = new List<MeetingInfo>();
//...populate the list with data
var mockList = new Mock<IMeetingList>();
mockList.As<IQueryable<MeetingInfo>>().Setup(m => m.Provider).Returns(meetingData.Provider);
mockList.As<IQueryable<MeetingInfo>>().Setup(m => m.Expression).Returns(meetingData.Expression);
mockList.As<IQueryable<MeetingInfo>>().Setup(m => m.ElementType).Returns(meetingData.ElementType);
mockList.As<IQueryable<MeetingInfo>>().Setup(m => m.GetEnumerator()).Returns(() => meetingData.GetEnumerator());

这将允许linq对mock的调用能够枚举测试的数据并应用谓词。