Код состояния утверждения веб-API XUnit Test

Я новичок в тестах 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;
            }
        }

Спасибо!

Он не будет компилироваться, потому что HttpStatusCode.NotFound() не является методом. Удалите круглые скобки, например HttpStatusCode.NotFound.

Brad 19.04.2018 08:51

@Brad thx! Теперь работает :)

superninja 19.04.2018 09:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
7 699
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Получив подсказки от @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;

superninja 19.04.2018 09:04

Извините, но NotFound не компилируется, мне не хватает другого пакета?

superninja 19.04.2018 09:07

@Brad, это был альтернативный подход к проверке ожидаемого ответа, что OP на самом деле пытался сделать. Кажется подходить костюм ОП.

Fabio 19.04.2018 11:06

Старый вопрос, но хотя принятый ответ действителен, он включает другую зависимость, которая полезна, но не обязательна для этого. Самый простой подход - сослаться на:

using Microsoft.AspNetCore.Mvc;

Затем проверьте:

Assert.IsAssignableFrom<NotFoundObjectResult>(response.Result);

предполагая, что ваш метод возвращает ActionResult.

Assert.Equal (System.Net.HttpStatusCode.Unauthorized, response.StatusCode);

Другие вопросы по теме