如何测试 MVC 控制器操作的响应 StatusCode

Lie*_*ero 5 c# mstest asp.net-core-mvc asp.net-core

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

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

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

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

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

 //assert
 ???
Run Code Online (Sandbox Code Playgroud)

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

Ign*_*nas 11

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);
Run Code Online (Sandbox Code Playgroud)


Ips*_*aur 1

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

您还可以参考这些文档来了解如何IHttpActionResult工作。

  • 对于 Web API 2,您的答案是正确的。但是 OP 适用于 Asp.net-Core,这仍然适用。但你应该找到核心文档来确定。 (2认同)