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

XUnit测试Web API:如何断言404(NotFound)状态码

解决Web API XUnit测试中404状态码的断言问题

嘿,刚接触XUnit测试Web API的话,这个404断言的问题其实很容易搞定!我来一步步教你修改测试代码:

首先,ASP.NET Core控制器返回的IActionResult是一个基类,你需要先把响应转换成具体的NotFoundResult(或者带内容的NotFoundObjectResult),才能对状态码做断言。下面是完整的测试代码示例:

[Fact]
public async Task getBooksById_NullInput_Notfound()
{
    //Arrange
    var mockConfig = new Mock<IConfiguration>();
    var controller = new BookController(mockConfig.Object);

    //Act
    var response = await controller.GetBooksById(null);

    //Assert
    // 第一步:确认响应是NotFoundResult类型(如果返回带内容的用NotFoundObjectResult)
    var notFoundResult = Assert.IsType<NotFoundResult>(response);
    
    // 第二步:断言状态码为404,用框架常量更规范
    Assert.Equal(StatusCodes.Status404NotFound, notFoundResult.StatusCode);
}

额外说明:

  • 如果你的GetBooksById方法是返回带自定义内容的404(比如return NotFound("书籍ID不能为空")),那你需要把断言改成针对NotFoundObjectResult:
    var notFoundObjResult = Assert.IsType<NotFoundObjectResult>(response);
    Assert.Equal(StatusCodes.Status404NotFound, notFoundObjResult.StatusCode);
    // 还可以额外断言返回的提示内容
    Assert.Equal("书籍ID不能为空", notFoundObjResult.Value);
    
  • 用StatusCodes.Status404NotFound这个框架提供的常量,比直接写数字404更安全,避免拼写错误,也更符合代码规范。
  • 如果你不确定返回的具体类型,可以先在调试模式下查看response的实际类型,再调整断言的目标类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:54:53