Moq - 嘲笑LINQ当& FirstOrDefault

时间:2015-12-14 16:02:48

标签: c# linq unit-testing mocking moq

我有以下代码,我正在尝试模拟它,但我的单元测试失败。

代码:

await _someDataRepository.GetSomeDataAsync(false)
                         .Where(r => r.Code == statusCode)
                         .FirstOrDefault();

素:

Mock<SomeDataRepository> _someDataRepositoryMock = new Mock<SomeDataRepository>();

_someDataRepositoryMock.Setup(s => s.GetSomeDataAsync(It.IsAny<bool>()))
                       .Returns<List<Domain.Student.Entities.SectionRegistrationStatusItem>>(
                           i => Task.FromResult(
                               i.Where(sr => sr.Code == It.IsAny<string>())
                           )
                       );

我如何模拟链式陈述?

1 个答案:

答案 0 :(得分:1)

作为评论中的mentioend,您无法模仿Item和/或Where。您要模拟FirstOrDefault并让_someDataRepository.GetSomeDataAsync(false)处理从Where返回的数据。

不幸的是我没有测试过这段代码,但它可能会给你一些灵感:

GetSomeDataAsync

或者如果您使用的是Moq 4.2或更高版本

_someDataRepositoryMock.Setup(s => s.GetSomeDataAsync(It.IsAny<bool>()))
                       .Returns(Task.FromResult(Your data here, i.e. List<Domain.Student.Entities.SectionRegistrationStatusItem>));