You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

模拟异步方法返回null:await调用GetAsync<T>为何返回null?

问题排查:await调用GetAsync返回null的原因及解决方法
  • 泛型类型不匹配:你Mock的是GetAsync<InvoiceFileContract>,但测试代码里实际调用的是GetAsync<InvoiceContract>,两者泛型参数类型不一致,导致Mock的配置没有被命中,自然返回null。
  • 参数匹配逻辑错误:Mock中第三个参数写的是null,但方法定义里该参数的默认值是default。在Moq的匹配规则里,直接写null和匹配默认参数的逻辑不兼容,当调用时不传第三个参数,Moq会认为参数不匹配,不会触发预设的返回值。

另外,你看到第一行代码“符合预期”是假象——那行只是获取了Task<T>对象,并没有执行异步操作、触发Mock的返回逻辑,实际上如果await这个foo,结果同样会是null。

修正后的Mock配置

_IHttpClientServiceMock
    .Setup(a => a.GetAsync<InvoiceContract>(It.IsAny<Uri>(), It.IsAny<Dictionary<string, string>>(), It.IsAny<AuthenticationDTO>()))
    .ReturnsAsync(invoiceContract); // 注意这里要传入InvoiceContract类型的实例,不是invoiceFileContract

内容的提问来源于stack exchange,提问作者stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:10:17