【问题标题】:How to test response StatusCode of MVC Controller Action如何测试 MVC 控制器动作的响应状态码
【发布时间】:2021-01-25 07:46:51
【问题描述】:

我想为我的控制器编写单元测试。

我想检查动作的响应代码。例如,Post 操作应该返回201,get 应该返回200,等等。

但是,Action 方法返回 IActionResult。如何从ActionResult 获取响应码?

 //setup
 MyController controller = CreateController<MyController>();

 //action
 var actionResult = controller.Post(dafXml);

 //assert
 ???

我不想检查操作结果的类型,因为我只关心状态代码。例如,201 可以通过CreatedAtActionCreatedAtRoute 或自定义ObjectResult 来实现...

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc mstest


    【解决方案1】:

    FluentAssertions 提供了一种优雅的方式来断言控制器响应代码。请参阅下面的示例。

    // 200
    actionResult.Should().BeOfType<OkObjectResult>()
        .Which.StatusCode.Should().Be((int)HttpStatusCode.OK);
    
    // 201
    actionResult.Should().BeOfType<CreatedResult>()
        .Which.StatusCode.Should().Be((int)HttpStatusCode.Created);
    
    // 500
    actionResult.Should().BeOfType<ObjectResult>()
        .Which.StatusCode.Should().Be((int)HttpStatusCode.InternalServerError);
    

    【讨论】:

      【解决方案2】:

      你可以简单地在IHttpActionResult对象上调用ExecuteAsync方法来获得HttpResponseMessage类型的Http响应,然后访问StatusCode属性来验证它。

      您也可以参考这些docs 了解IHttpActionResult 的工作原理。

      【讨论】:

      • 您的答案对于 Web API 2 是正确的。但是 OP 适用于仍然适用的 Asp.net-Core。但是您应该从 core 中找到文档以确保。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      相关资源
      最近更新 更多