XUnit 测试网站 API 断言状态代码
XUnit Test Web API Assert Status code
我是 XUnit
Web API 应用程序测试的新手。我正在尝试使用状态代码 404 断言我的响应值,但我不确定该怎么做。
这是我的测试代码。
Assume the input is null, the test is expected to return NotFound or 404
status code.
[Fact]
public async Task getBooksById_NullInput_Notfound()
{
//Arrange
var mockConfig = new Mock<IConfiguration>();
var controller = new BookController(mockConfig.Object);
//Act
var response = await controller.GetBooksById(null);
//Assert
mockConfig.VerifyAll();
Assert(response.StatusCode, HttpStatusCode.NotFound()); //How to achieve this?
}
在这个测试方法的最后一行,我无法编译 response.StatusCode
因为响应变量没有 StatusCode
属性。而且没有HttpStatusCode
class我可以调用...
这是我在控制器中的 GetBooksByID()
方法 class。
public class BookController : Controller
{
private RepositoryFactory _repositoryFactory = new RepositoryFactory();
private IConfiguration _configuration;
public BookController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
[Route("api/v1/Books/{id}")]
public async Task<IActionResult> GetBooksById(string id)
{
try
{
if (string.IsNullOrEmpty(id))
{
return BadRequest();
}
var response = //bla
//do something
if (response == null)
{
return NotFound();
}
return new ObjectResult(response);
}
catch (Exception e)
{
throw;
}
}
谢谢!
得到@Brad的提示后,代码编译通过测试。
response.ToString().Equals(HttpStatusCode.NotFound);
您可以检查返回的类型
// Act
var actualResult = await controller.GetBooksById(null);
// Assert
actualResult.Should().BeOfType<BadRequestResult>();
Should()
和 .BeOfType<T>
是 FluentAssertions 库中的方法,可在 Nuget
上使用
老问题,但虽然接受的答案是有效的,但它引入了另一个有帮助但不是必需的依赖项。最直接的做法是参考:
using Microsoft.AspNetCore.Mvc;
然后测试:
Assert.IsAssignableFrom<NotFoundObjectResult>(response.Result);
假设您的方法 returns 一个 ActionResult。
Assert.Equal(System.Net.HttpStatusCode.Unauthorized, response.StatusCode);
我是 XUnit
Web API 应用程序测试的新手。我正在尝试使用状态代码 404 断言我的响应值,但我不确定该怎么做。
这是我的测试代码。
Assume the input is null, the test is expected to return NotFound or 404 status code.
[Fact]
public async Task getBooksById_NullInput_Notfound()
{
//Arrange
var mockConfig = new Mock<IConfiguration>();
var controller = new BookController(mockConfig.Object);
//Act
var response = await controller.GetBooksById(null);
//Assert
mockConfig.VerifyAll();
Assert(response.StatusCode, HttpStatusCode.NotFound()); //How to achieve this?
}
在这个测试方法的最后一行,我无法编译 response.StatusCode
因为响应变量没有 StatusCode
属性。而且没有HttpStatusCode
class我可以调用...
这是我在控制器中的 GetBooksByID()
方法 class。
public class BookController : Controller
{
private RepositoryFactory _repositoryFactory = new RepositoryFactory();
private IConfiguration _configuration;
public BookController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
[Route("api/v1/Books/{id}")]
public async Task<IActionResult> GetBooksById(string id)
{
try
{
if (string.IsNullOrEmpty(id))
{
return BadRequest();
}
var response = //bla
//do something
if (response == null)
{
return NotFound();
}
return new ObjectResult(response);
}
catch (Exception e)
{
throw;
}
}
谢谢!
得到@Brad的提示后,代码编译通过测试。
response.ToString().Equals(HttpStatusCode.NotFound);
您可以检查返回的类型
// Act
var actualResult = await controller.GetBooksById(null);
// Assert
actualResult.Should().BeOfType<BadRequestResult>();
Should()
和 .BeOfType<T>
是 FluentAssertions 库中的方法,可在 Nuget
老问题,但虽然接受的答案是有效的,但它引入了另一个有帮助但不是必需的依赖项。最直接的做法是参考:
using Microsoft.AspNetCore.Mvc;
然后测试:
Assert.IsAssignableFrom<NotFoundObjectResult>(response.Result);
假设您的方法 returns 一个 ActionResult。
Assert.Equal(System.Net.HttpStatusCode.Unauthorized, response.StatusCode);