bho*_*ole 5 c# linq unit-testing moq mocking
我有以下代码,我正在尝试模拟它,但我的单元测试失败了。
代码:
await _someDataRepository.GetSomeDataAsync(false)
.Where(r => r.Code == statusCode)
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
嘲笑:
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>())
)
);
Run Code Online (Sandbox Code Playgroud)
我将如何模拟链式语句?
正如评论中提到的,你不能嘲笑Where和/或FirstOrDefault。您可以模拟_someDataRepository.GetSomeDataAsync(false)并Where处理从 . 返回的数据GetSomeDataAsync。
不幸的是我还没有测试过这段代码,但它可能会给你一些启发:
_someDataRepositoryMock.Setup(s => s.GetSomeDataAsync(It.IsAny<bool>()))
.Returns(Task.FromResult(Your data here, i.e. List<Domain.Student.Entities.SectionRegistrationStatusItem>));
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是 Moq 4.2 或更高版本
_someDataRepositoryMock.Setup(s => s.GetSomeDataAsync(It.IsAny<bool>()))
.ReturnAsync(Your data here, i.e. List<Domain.Student.Entities.SectionRegistrationStatusItem>);
Run Code Online (Sandbox Code Playgroud)