gpt4 book ai didi

c# - 如何测试返回 Ok(object) 的 ASP.NET Core 2.2 Web API GET IActionResult?

转载 作者:行者123 更新时间:2023-12-03 23:07:14 27 4
gpt4 key购买 nike

在我的 Web API 中,我有一个简单的 Controller 操作:

[HttpGet]
[Route("[action]")]
public IActionResult GetApiStatus(string token)
{
if (_token != token)
{
return StatusCode(401);
}

StatusModel status = _vesselUpdating.GetUpdatingStatus();

return Ok(status);
}

并且 Action 返回 StatusModel类型对象。我无法管理如何测试其退货状态。

我的测试方法如下:
[Theory]
[InlineData("wrong_token", StatusCodes.Status401Unauthorized)]
[InlineData("test_token", StatusCodes.Status200OK)]
[InlineData("", StatusCodes.Status401Unauthorized)]
[InlineData(null, StatusCodes.Status401Unauthorized)]
public void Get_GetAnyAction_WithVariusTokens_ReturnsCorrectStatusCode(string token, int code)
{
_vesselUpdatingMock.Setup(v => v.GetUpdatingStatus()).Returns(_sampleStatusModel);
IActionResult result;

result = _updatesController.GetApiStatus(token);
StatusCodeResult resultGetApiStatus = result as StatusCodeResult;

Assert.Equal(code, resultGetApiStatus.StatusCode);
}

调试时
result = _updatesController.GetApiStatus(token);
StatusCode IActionResult 的属性(property)是 200 ,但只有 DeclaredType其属性是 .

result debug

当断言时,最后我有我的 resultGetApiStatus .

assert null

我没有设法找到类似的例子。我如何投影 result适本地?

重要编辑:

我只找到了 this approach ,这不能解决我的问题,关于各种情况 [Theory] ,并不是我所有的其他操作都返回 ObjectResult ,其中一些只返回 StatusCode .是否有任何通用的方法来处理有和没有的操作 ObjectResult ?或者我应该使用不同的测试?

最佳答案

挫折不仅是你自己拥有。
OkObjectResult不继承自 StatusCodeResult , 故

StatusCodeResult resultGetApiStatus = result as StatusCodeResult;

正确地返回空值。

见: https://github.com/aspnet/Mvc/issues/7134

您应该能够强制使用 IStatusCodeActionResult

https://github.com/dotnet/aspnetcore/blob/a410ed460140a55dd699e83d978b798de48802fb/src/Mvc/Mvc.Core/src/StatusCodeResult.cs#L32但是,我不确定这是随附的哪个版本(2.1?)
[Theory]
[InlineData("wrong_token", StatusCodes.Status401Unauthorized)]
[InlineData("test_token", StatusCodes.Status200OK)]
[InlineData("", StatusCodes.Status401Unauthorized)]
[InlineData(null, StatusCodes.Status401Unauthorized)]
public void Get_GetAnyAction_WithVariusTokens_ReturnsCorrectStatusCode(string token, int code)
{
_vesselUpdatingMock.Setup(v => v.GetUpdatingStatus()).Returns(_sampleStatusModel);

var result = _updatesController.GetApiStatus(token);
var resultGetApiStatus = result as IStatusCodeActionResult;

Assert.Equal(code, resultGetApiStatus.StatusCode);
}

关于c# - 如何测试返回 Ok(object) 的 ASP.NET Core 2.2 Web API GET IActionResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61719323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com