我想为我的控制器编写单元测试。
我想查看操作的响应代码。例如,Post操作应该返回201
,get应该返回200
等等。
但是,Action方法返回IActionResult
。如何从ActionResult
获取响应代码?
//setup
MyController controller = CreateController<MyController>();
//action
var actionResult = controller.Post(dafXml);
//assert
???
我不想检查动作结果的类型,因为我只关心状态代码。例如,201
可以通过CreatedAtAction
,CreatedAtRoute
或自定义ObjectResult
来实现...
答案 0 :(得分:2)
您只需在ExecuteAsync
对象上调用IHttpActionResult
方法即可获取HttpResponseMessage
类型的Http响应,然后访问StatusCode
属性进行验证。
您还可以参考IHttpActionResult
的工作原理 -
答案 1 :(得分: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);