Mock Validate方法时遇CS1929错误:ISetup无ReturnsAsync定义
解决CS1929错误的方案
错误根源是Moq的ReturnsAsync无法直接识别你传入的多个参数——你的Validate方法返回的是包含四个元素的元组Task,而ReturnsAsync需要接收完整的元组实例,而非分散的参数。
直接修正mock代码即可,有两种可行方式:
方式一:构造完整元组传入
将多个参数打包成和Validate返回类型一致的元组,直接传给ReturnsAsync:mOckServiceTemplateblService.Setup(x => x.Validate(It.IsAny<ServiceUploadRequest>())) .ReturnsAsync((fileContent, "对应fe的字符串值", logicSheet, new Errors()));注意替换示例中的"对应fe的字符串值"为实际变量或值,确保元组的元素类型、数量和
Validate方法的返回元组完全匹配。方式二:用Lambda表达式返回元组
这种方式更灵活,适合需要动态生成返回值的场景:mOckServiceTemplateblService.Setup(x => x.Validate(It.IsAny<ServiceUploadRequest>())) .ReturnsAsync(() => (fileContent, fe变量, logicSheet, new Errors()));
额外检查点:确认IServiceTemplateBlService接口中Validate方法的返回类型确实是Task<(byte[], string, Sheet, Errors)>,元组的元素类型、顺序必须和mock时构造的完全一致,否则仍会出现重载不匹配的问题。
内容的提问来源于stack exchange,提问作者udhaya
相关产品推荐
相关产品推荐

