Невозможно выполнить модульное тестирование контроллера API с помощью moq.Куда я иду не так? - PullRequest
0 голосов
/ 01 марта 2019

Класс контроллера

[Route("hollywood/[controller]")]
    [ApiController]
    public class MoviesController : Controller
    {
        List<Film> film = new List<Film>()
        {
            new Film(){id=1,name="The Dark Knight",director="Christopher Nolan", release=2008},
            new Film(){id=2,name="300",director="Zack Snyder", release=2007},
            new Film(){id=3,name="Titanic",director="James Cameron", release=1997},
        };

        // GET film/movies
        [HttpGet]
        public IActionResult Get()
        {
            // some code
            return Json(film);
        }

        // GET film/movies/{id}
        [HttpGet("{id}")]
        public IActionResult Get(int id)
        {
            // some code
            return Json(film.FirstOrDefault(x => x.id == id));
        }

        [HttpPost]
        public IActionResult Post([FromBody]Film value)
        {
            // some code
            film.Add(value);
            return Json(film);
        }
    }

Класс модели

public class Film
    {
        public int id { get; set; }
        public string name { get; set; }
        public string director { get; set; }
        public int release { get; set; }
    }

Тест

[Fact]
        public async Task TestGet()
        {
            List<Film> film = new List<Film>()
            {
                new Film(){id=1,name="The Dark Knight",director="Christopher Nolan", release=2008},
                new Film(){id=2,name="300",director="Zack Snyder", release=2007},
                new Film(){id=3,name="Titanic",director="James Cameron", release=1997},
            };

            // Arrange
            string expectedResult = JsonConvert.SerializeObject(film);
            var requestUri = new Uri("http://localhost:51867/film/movies");

            // Act
            var mockHandler = new Mock<MoviesController>();

            mockHandler
                .Setup(x => x.Get())
                .Returns(expectedResult);

            var httpClient = new HttpClient(mockHandler.Object);  
            var result = await httpClient.GetStringAsync(requestUri).ConfigureAwait(false);

            // Assert
            Assert.Equal(expectedResult, result);
        }

Я выполняю модульное тестирование, используя moq.Мне нужно смоделировать вызовы Get / Post в контроллерах, используя Moq HttpClient.Я не могу издеваться над объектом.Пожалуйста, дайте мне знать, что я делаю не так?Является ли возвращаемый тип IActionResult причиной его сбоя?Если да, что еще я могу использовать вместо IActionResult?

...