Как правильно проверить результат в 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<ContentResult>(result);
            Assert.Equal();
        }

Как правильно выполнить Assert.Equal(), даже точнее что ему передать в качестве параметов, чтобы проверить два return из контроллера?


Ответы (1 шт):

Автор решения: Nikita

На каждый return надо написать отдельный unit-тест, чтобы проверить что контроллер возращает положительный ответ, надо сделать что-то вроде этого

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

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

затем сравниваем результат через Assert

Чтобы проверить что контроллер возращает отрицательный ответ, надо сделать что-то вроде этого

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

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

и затем снова сравниваем результат через Assert

→ Ссылка