@Nikita07

Почему результат Unit-теста не совпадает с тем, что я ожидаю?

Всем привет, помогите разобраться с Unit-тестом, есть следующий контроллер
[HttpGet]
        public async Task<ActionResult> Auction([FromQuery] int[] ids, [FromQuery] string platfrom, AuctionModel auctionModel)
        {
            var partners = _adcampaign.GetRtbPartners(ids);
            var result = await _rtbservice.GetAuctionResult(partners.Values, auctionModel);

            if (result?.Length > 0)
            {
                return new ContentResult
                {
                    Content = result,
                    ContentType = "application/xml",
                    StatusCode = 200
                };
            }
            else return NoContent();
        }


И к нему написан вот такой unit-тест
[Fact]
        public async Task ReturnNoContentResult()
        {
            int[] ids = // Заполение

            IReadOnlyDictionary<int, RtbModel> partners = // Заполение

            List<RtbModel> rtb_partners = // Заполнение

            var auctionModel = // Заполнение

            // Arrange
            var mock1 = new Mock<IRtbService>();
            mock1
                .Setup(a => a.GetAuctionResult(rtb_partners, auctionModel))
                .ReturnsAsync("Строка");

            var mock2 = new Mock<ICachingResults>();
            mock2
                .Setup(a => a.GetRtbPartners(ids))
                .Returns(partners);

            var controller = new RtbController(mock1.Object, mock2.Object);

            // Act
            var result = await controller.Auction(ids, "1111-1-1", auctionModel);

            // Assert
            var contentResult = Assert.IsType<OkResult>(result);
        }


При выполнении есть следуюшая ошибка
60f00487d0d03019268014.png

Почему тест ожидает NoContentResult, если должен вернуть строку?
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Метод контроллера возвращает тип ActionResult.
Он является родительским для OkResult, NoContentResult, ContentResult и других.

Вот это Assert.IsType(result) проверяет на соответствие типу а не на то что в ответе будет 200.
Тип должен был быть ContentResult а внутри и код и строка.
Но у вас возвращается NoContentResult. Видимо при конфигурировании теста вы допустили ошибку и у вас
result?.Length > 0 == false
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы