Moq模拟仓储CreateAsync方法返回传入集合失败,返回空IEnumerable求助
问题解决:Moq模拟CreateAsync返回传入的集合
你的模拟代码存在几个问题,导致最终返回空IEnumerable,修正方案如下:
- 拼写错误:代码里的
enteties是拼写错误,正确类型名应为Entity,同时要保持大小写一致。 - 参数类型不匹配:目标方法的第一个参数是
IEnumerable<Entity>,但你用It.IsAny<List<Entity>>来匹配,若调用时传入的不是List类型的IEnumerable(比如数组),就会匹配失败,触发Moq的默认返回值(空IEnumerable)。应改成匹配IEnumerable<Entity>。 - 可空CancellationToken匹配错误:方法定义的
token参数是CancellationToken?(可空类型),但你用It.IsAny<CancellationToken>(非可空)匹配,同样会导致匹配失败。
修正后的完整代码:
repository.Setup(i => i.CreateAsync(It.IsAny<IEnumerable<Entity>>(), It.IsAny<CancellationToken?>())) .ReturnsAsync((IEnumerable<Entity> entities, CancellationToken? token) => entities);
如果你的业务场景中,调用CreateAsync时只会传入List<Entity>类型的参数,也可以保留List的匹配,但要确保拼写和参数类型正确:
repository.Setup(i => i.CreateAsync(It.IsAny<List<Entity>>(), It.IsAny<CancellationToken?>())) .ReturnsAsync((List<Entity> entities, CancellationToken? token) => entities);
内容的提问来源于stack exchange,提问作者boom325
相关产品推荐
相关产品推荐

