Я новичок в тестах XUnit для приложения веб-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, который я могу назвать ...
Вот мой метод 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;
}
}
Спасибо!
@Brad thx! Теперь работает :)





Получив подсказки от @Brad, код компилируется и проходит тест.
response.ToString().Equals(HttpStatusCode.NotFound);
Вы можете проверить возвращаемый тип
// Act
var actualResult = await controller.GetBooksById(null);
// Assert
actualResult.Should().BeOfType<BadRequestResult>();
Should() и .BeOfType<T> - это методы из библиотеки FluentAssertions, которые доступны на Nuget.
Моя беда, я не использовал using FluentAssertions;
Извините, но NotFound не компилируется, мне не хватает другого пакета?
@Brad, это был альтернативный подход к проверке ожидаемого ответа, что OP на самом деле пытался сделать. Кажется подходить костюм ОП.
Старый вопрос, но хотя принятый ответ действителен, он включает другую зависимость, которая полезна, но не обязательна для этого. Самый простой подход - сослаться на:
using Microsoft.AspNetCore.Mvc;
Затем проверьте:
Assert.IsAssignableFrom<NotFoundObjectResult>(response.Result);
предполагая, что ваш метод возвращает ActionResult.
Assert.Equal (System.Net.HttpStatusCode.Unauthorized, response.StatusCode);
Он не будет компилироваться, потому что
HttpStatusCode.NotFound()не является методом. Удалите круглые скобки, напримерHttpStatusCode.NotFound.