C# 如何测试MVC控制器动作的响应状态码
我想为我的控制器编写单元测试 我想检查行动的响应代码。例如,Post操作应该返回C# 如何测试MVC控制器动作的响应状态码,c#,asp.net-core,asp.net-core-mvc,mstest,C#,Asp.net Core,Asp.net Core Mvc,Mstest,我想为我的控制器编写单元测试 我想检查行动的响应代码。例如,Post操作应该返回201,get应该返回200,等等 但是,操作方法返回IActionResult。如何从ActionResult中获取响应代码 //setup MyController controller = CreateController<MyController>(); //action var actionResult = controller.Post(dafXml); //assert ??
201
,get应该返回200
,等等
但是,操作方法返回IActionResult
。如何从ActionResult
中获取响应代码
//setup
MyController controller = CreateController<MyController>();
//action
var actionResult = controller.Post(dafXml);
//assert
???
//设置
MyController控制器=CreateController();
//行动
var actionResult=controller.Post(dafXml);
//断言
???
我不想检查操作结果的类型,因为我只关心状态代码。例如,
201
可以通过createDataAction
实现,CreatedAtRoute
或使用自定义的ObjectResult
。您只需通过IHttpActionResult
对象调用ExecuteAsync
方法,即可获得HttpResponseMessage
类型的Http响应,然后访问StatusCode
属性进行验证
您还可以参考这些来了解
ihttpackationresult
的工作原理。您只需通过ihttpackationresult
对象调用ExecuteAsync
方法,即可获得HttpResponseMessage
类型的Http响应,然后访问StatusCode
属性来验证它
您还可以参考这些来了解IHttpActionResult
的工作原理。提供了一种优雅的方式来断言控制器响应代码。见下面的例子
// 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);
/200
actionResult.Should().BeOfType()的
.Which.StatusCode.Should()应该是((int)HttpStatusCode.OK);
// 201
actionResult.Should().BeOfType()的
.Which.StatusCode.Should().Be((int)HttpStatusCode.Created);
// 500
actionResult.Should().BeOfType()的
.Which.StatusCode.Should().Be((int)HttpStatusCode.InternalServerError);
提供了一种优雅的方式来断言控制器响应代码。见下面的例子
// 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);
/200
actionResult.Should().BeOfType()的
.Which.StatusCode.Should()应该是((int)HttpStatusCode.OK);
// 201
actionResult.Should().BeOfType()的
.Which.StatusCode.Should().Be((int)HttpStatusCode.Created);
// 500
actionResult.Should().BeOfType()的
.Which.StatusCode.Should().Be((int)HttpStatusCode.InternalServerError);
对于Web API 2,您的答案是正确的。不过,OP适用于Asp.net-Core,它仍然适用。但是您应该从core中找到文档以确保。您的答案对于WebAPI2是正确的。不过,OP适用于Asp.net-Core,它仍然适用。但是您应该从core中找到文档以确保。