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

单元测试中对象转LoanProgressResponse始终返回Null问题排查

问题排查与解决方案

核心原因:运行时类型不匹配

虽然result.Value的结构和LoanProgressResponse看起来完全一致,但实际运行时类型并非LoanProgressResponse,这是as转换返回null的本质原因。常见场景包括:

  • 命名空间/程序集不一致:存在另一个结构完全相同但属于不同命名空间/程序集的类,Invoke返回的是这个类的实例,而非你定义的LoanProgressResponse。
  • JSON反序列化产物:Invoke内部通过JSON反序列化生成对象时,未指定目标类型,返回的是JObject(Newtonsoft.Json)或JsonElement(System.Text.Json)这类JSON节点类型,而非强类型实例。
  • 匿名类型:Invoke返回的是匿名类型实例,而非预定义的LoanProgressResponse。

排查步骤

  1. 确认实际类型:调试时添加监视,查看result.Value.GetType().FullName,对比typeof(LoanProgressResponse).FullName,确认两者是否完全一致(包括命名空间和程序集信息)。
  2. 检查反序列化逻辑:如果Invoke涉及JSON反序列化,查看是否指定了正确的目标类型LoanProgressResponse。

针对性解决方案

  1. 类型不一致(命名空间/程序集)
    统一使用同一个LoanProgressResponse类,或者手动映射属性:
var rawValue = result.Value;
var okResult = new LoanProgressResponse
{
    response_id = rawValue.response_id,
    status_code = rawValue.status_code,
    status_description = rawValue.status_description,
    current_progress = rawValue.current_progress,
    is_approved = rawValue.is_approved
};
  1. JSON节点类型(JObject/JsonElement)
  • 若使用Newtonsoft.Json:
var jObject = result.Value as JObject;
var okResult = jObject?.ToObject<LoanProgressResponse>();
  • 若使用System.Text.Json:
var jsonElement = result.Value as JsonElement;
var okResult = JsonSerializer.Deserialize<LoanProgressResponse>(jsonElement.GetRawText());
  1. 匿名类型返回
    修改Invoke方法的逻辑,使其返回LoanProgressResponse类型实例,而非匿名类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:32:38