Как смоделировать почтовый запрос? - PullRequest
0 голосов
/ 07 марта 2019

Контроллер:

private IBeer _beerService;

public BeerController(IBeer beerService)
{
    _beerService = beerService;
}

[HttpPost]
public async Task<IActionResult> Post([FromBody]Beer model)
{
     if (!ModelState.IsValid)
     {
          return BadRequest(ModelState);
     }
     var beer = await _beerService.Add(model);
     return Ok(CreatedAtAction("Add Item", new { beer.id }, beer));
}

Модель:

public class Beer
    {
        public int id { get; set; }
        public string name { get; set; }
        public int cost { get; set; }
    }

Интерфейс:

public interface IBeer
    {
        Task<Beer> Add(Beer beer);
    }

Тест:

[Fact]
        public void TestPostWithMock()
        {
            // Arrange
            var serviceMock = new Mock<IBeer>();
            List<Beer> expected = new List<Beer>()
            {
                new Beer{id=2, beer="Kingfisher", cost=170 },
            };
            serviceMock.Setup(x => x.Add(expected)).Returns(() => Task.FromResult(beer));
            var controller = new BeerController(serviceMock.Object);

            // Act
            var result = controller.Get(2);

            // Assert
            var okResult = result.Should().BeOfType<OkObjectResult>().Subject;
            var actual = okResult.Value.Should().BeAssignableTo<IEnumerable<Beer>>().Subject;

            Assert.Equal(expected, actual);
        }

Я пытаюсь смоделировать почтовый запрос, но когда пытаюсь смоделировать его здесь:

x => x.Add(expected) 

Это дает мне ошибку - Generic.list не может быть преобразован в Controller.Beer. Что должно быть сделано?

1 Ответ

1 голос
/ 07 марта 2019

Как упоминается в описании ошибки, вы отправляете список пива (List<Beer>) на ваш метод Add() при настройке вашего сервиса.Вместо этого вы должны отправить Beer экземпляр класса (как в вашем интерфейсе) в качестве параметра, как показано ниже.

// Update your request object without List 
var expected = new  Beer()  
    {
        id=2,
        beer="Kingfisher",
        cost=170
     };

А также, обновите вашу функцию установки, как показано ниже.

serviceMock.Setup(x => x.Add(expected)).Returns(() => Task.FromResult(expected));

Наконецвам нужно получить результат от метода controller.Post() как в контроллере, а не от controller.Get(2).Надеюсь, это поможет вам.

...