【发布时间】:2018-04-19 06:31:53
【问题描述】:
我是 XUnit Web API 应用程序测试的新手。我正在尝试使用状态码 404 来断言我的响应值,但我不知道该怎么做。
这是我的测试代码。
假设输入为null,测试预计返回NotFound或404 状态码。
[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 类...
这是我在控制器类中的GetBooksByID() 方法。
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;
}
}
谢谢!
【问题讨论】:
-
它不会编译,因为
HttpStatusCode.NotFound()不是一个方法。删除括号,例如HttpStatusCode.NotFound. -
@Brad 谢谢!它现在可以工作了:)
标签: c# api unit-testing asp.net-core xunit