.NET Core Xunit - IActionResult' 不包含 'StatusCode' 的定义
.NET Core Xunit - IActionResult' does not contain a definition for 'StatusCode'
我有一个用 .NET Core 编写的 API 并使用 xUnit 对其进行测试。
我在 API 中有我的方法:
[HttpDelete("api/{id}")]
public async Task<IActionResult> DeleteUserId(string id)
{
try
{
//deleting from db
}
catch (Exception ex)
{
return StatusCode(500, ex.Message);
}
}
我想在 null/empty id 传递给此方法时编写单元测试。
我的测试用例为:
[Fact]
public void DeleteUserId_Test()
{
//populate db and controller here
var response= _myController.DeleteUserId(""); //trying to pass empty id here
// Assert
Assert.IsType<OkObjectResult>(response);
}
如何检查状态代码 500 是 return 从我的控制器方法调用中编辑的。像
Assert.Equal(500, response.StatusCode);
调试时我可以看到响应有结果 return 类型 (Microsoft.AspNetCore.Mvc.ObjectResult) 其中 StatusCode
为 500。
但是当我尝试这样做时:
response.StatusCode
它抛出错误:
'IActionResult' does not contain a definition for 'StatusCode' and no extension method 'StatusCode' accepting a first argument of type 'IActionResult' could be found (are you missing a using directive or an assembly reference?)
我该如何解决这个问题?
将响应转换为所需的类型并访问成员以进行断言。
注意测试的动作returns一个Task
,所以测试应该更新为async
[Fact]
public async Task DeleteUserId_Test() {
// Arrange
// ...populate db and controller here
// Act
IActionResult response = await _myController.DeleteUserId(""); //trying to pass empty id here
// Assert
ObjectResult objectResponse = Assert.IsType<ObjectResult>(response);
Assert.Equal(500, objectResponse.StatusCode);
}
您可以使用 Assert.IsType<OkObjectResult>(response);
的 return 值来获取所需的类型:
var result = Assert.IsType<OkObjectResult>(response);
Assert.Equal(500, result.StatusCode)
我有一个用 .NET Core 编写的 API 并使用 xUnit 对其进行测试。
我在 API 中有我的方法:
[HttpDelete("api/{id}")]
public async Task<IActionResult> DeleteUserId(string id)
{
try
{
//deleting from db
}
catch (Exception ex)
{
return StatusCode(500, ex.Message);
}
}
我想在 null/empty id 传递给此方法时编写单元测试。
我的测试用例为:
[Fact]
public void DeleteUserId_Test()
{
//populate db and controller here
var response= _myController.DeleteUserId(""); //trying to pass empty id here
// Assert
Assert.IsType<OkObjectResult>(response);
}
如何检查状态代码 500 是 return 从我的控制器方法调用中编辑的。像
Assert.Equal(500, response.StatusCode);
调试时我可以看到响应有结果 return 类型 (Microsoft.AspNetCore.Mvc.ObjectResult) 其中 StatusCode
为 500。
但是当我尝试这样做时:
response.StatusCode
它抛出错误:
'IActionResult' does not contain a definition for 'StatusCode' and no extension method 'StatusCode' accepting a first argument of type 'IActionResult' could be found (are you missing a using directive or an assembly reference?)
我该如何解决这个问题?
将响应转换为所需的类型并访问成员以进行断言。
注意测试的动作returns一个Task
,所以测试应该更新为async
[Fact]
public async Task DeleteUserId_Test() {
// Arrange
// ...populate db and controller here
// Act
IActionResult response = await _myController.DeleteUserId(""); //trying to pass empty id here
// Assert
ObjectResult objectResponse = Assert.IsType<ObjectResult>(response);
Assert.Equal(500, objectResponse.StatusCode);
}
您可以使用 Assert.IsType<OkObjectResult>(response);
的 return 值来获取所需的类型:
var result = Assert.IsType<OkObjectResult>(response);
Assert.Equal(500, result.StatusCode)