在我的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
的操作的通用方法?还是应该使用不同的测试?