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

无需字面数字,如何更简洁测试ASP.NET Core控制器响应状态码?

解决方案:用ASP.NET Core内置的StatusCodes静态类

ASP.NET Core官方已经在Microsoft.AspNetCore.Http命名空间下提供了预定义的静态状态码常量,完全不用自己手动枚举,直接用官方维护的常量就行,既省事又不会出错。

具体用法

  1. 先引用Microsoft.AspNetCore.Http命名空间
  2. 把测试里的硬编码数字换成StatusCodes.StatusXXX格式的常量:

修改后的测试代码:

using Microsoft.AspNetCore.Http;
using Xunit;

[Fact]
public void TestGetItemByIdNotFound() {
    var response = controller.GetItemById(1); // 无对应ItemId的场景
    var result = Assert.IsType<NotFoundResult>(response);
    Assert.Equal(StatusCodes.Status404NotFound, result!.StatusCode);
}

额外优化:直接断言结果类型(可选)

其实你已经通过Assert.IsType<NotFoundResult>确认了结果类型,可以不用再断言状态码——因为NotFoundResult的StatusCode是框架固定好的404,ASP.NET Core已经保证了这一点,这样测试代码会更简洁:

[Fact]
public void TestGetItemByIdNotFound() {
    var response = controller.GetItemById(1);
    // 只要断言结果是NotFoundResult类型,就等于验证了返回404状态
    Assert.IsType<NotFoundResult>(response);
}

常见状态码常量示例

官方的StatusCodes类覆盖了所有标准HTTP状态码,举几个常用的:

  • StatusCodes.Status200OK(对应200)
  • StatusCodes.Status400BadRequest(对应400)
  • StatusCodes.Status500InternalServerError(对应500)

这样既不用记状态码数字,也不用自己维护枚举,完全依赖官方实现,是最简洁可靠的方式。

内容的提问来源于stack exchange,提问作者Dmitry S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:45:26