gpt4 book ai didi

c# - Moq - 模拟 LINQ When 和 FirstOrDefault

转载 作者:行者123 更新时间:2023-11-30 12:42:19 28 4
gpt4 key购买 nike

我有以下代码,我试图模拟它,但我的单元测试失败了。

代码:

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>())
)
);

我将如何模拟链式语句?

最佳答案

正如评论中提到的那样,您不能模拟 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>));

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

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

关于c# - Moq - 模拟 LINQ When 和 FirstOrDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34271466/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com