【发布时间】:2020-08-26 09:09:15
【问题描述】:
在我的 Web API 中,我有一个简单的控制器操作:
[HttpGet]
[Route("[action]")]
public IActionResult GetApiStatus(string token)
{
if (_token != token)
{
return StatusCode(401);
}
StatusModel status = _vesselUpdating.GetUpdatingStatus();
return Ok(status);
}
并且操作返回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);
IActionResult 的 StatusCode 属性是 200,但只有 DeclaredType 的属性是 null。
当断言时,最后我有我的resultGetApiStatus null。
我没有找到类似的例子。如何正确投影result?
重要编辑:
我发现只有this approach,这不能解决我的问题,关于各种情况[Theory],并不是我所有的其他操作都返回ObjectResult,其中一些只返回StatusCode。有和没有ObjectResult 的操作是否有任何通用方法?还是应该使用不同的测试?
【问题讨论】:
标签: c# unit-testing asp.net-core xunit