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

MSTest测试接口返回200状态码但result.Value为null是什么原因?

问题原因

你所用的ASP.NET Core Controller 动作方法返回类型为ActionResult<ItemDto>,该类型的赋值逻辑如下:

  • 当动作方法直接返回ItemDto实例时,值会存储在外层ActionResult<ItemDto>的Value属性中
  • 当动作方法通过return Ok(返回值)、return NotFound()等封装方法返回结果时,实际结果会存储在ActionResult<ItemDto>的Result属性中,外层Value属性始终为null
    你已经确认返回的result.Result是OkObjectResult类型,所以预期的返回值需要从OkObjectResult的Value属性中获取。

修复方案

将原测试代码的断言部分修改为如下内容即可:

// 校验返回结果类型为OkObjectResult,同时提取结果实例
var okResult = result.Result.Should().BeOfType<OkObjectResult>().Subject;
// 对OkObjectResult中存储的业务值做等价断言
okResult.Value.Should().BeEquivalentTo(expected, options => options.ComparingByMembers<ItemDto>());

额外注意

如果你的GetItemById是异步接口,返回类型为Task<ActionResult<ItemDto>>,还需要同步调整测试代码:

  1. 测试方法返回值从void修改为async Task
  2. 调用接口时添加await关键字:
var result = await controller.GetItemById(random.Next());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:09:01