2017-10-04 70 views
0

我想为我的控制器编写单元测试。如何测试MVC控制器的响应状态码Action

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

但是,Action方法返回IActionResult。我如何获得ActionResult的响应码?

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

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

//assert 
??? 

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

回答

0

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);