C# 如何测试MVC控制器动作的响应状态码

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 ??

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

我想检查行动的响应代码。例如,Post操作应该返回
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中找到文档以确保。