Тестовый возврат Automapper или нет - PullRequest
0 голосов
/ 07 мая 2019

Я тестирую один из моих сервисов - movieService.Метод GetLatestMovies должен возвращать все фильмы, упорядоченные по дате.Я использую Autopper для сопоставления объекта Movie с MovieViewModel.

* Вопрос 1: * Как я должен это проверить, должен ли я установить возвратный сбор в тесте или как?

* Вопрос 2:* Я заполняю базу данных InMemory несколькими фильмами и ожидаю правильного упорядоченного результата от movieService. Как я должен проверить, возвращает ли сервис верный результат, если я установил возврат из автопроизводителя?

TestUtils.FillContextWithActorsMoviesAndGenres (параметры) - просто заполняет контекст несколькими фильмами.

Это метод movieService, который я тестирую

public async Task<ICollection<MovieViewModel>> GetLatestMoviesAsync()
        {
            var movies = await this.context.Movies
                .Include(um => um.ApplicationUserMovie)
                    .ThenInclude(u => u.User)
                .Include(x => x.Genre)
                .Include(x => x.MovieActor)
                    .ThenInclude(x => x.Actor)
                .OrderByDescending(x => x.CreatedOn).ToListAsync();

            var returnMovies = this.mappingProvider.MapTo<ICollection<MovieViewModel>>(movies);

            return returnMovies;
        }
[TestMethod]
        public async Task Return_TwoMoviesWithHighestRating()
        {
            var dabataseName = nameof(Return_TwoMoviesWithHighestRating);

            var options = TestUtils.GetOptions(dabataseName);

            // We fill the context with data and save it.
            TestUtils.FillContextWithActorsMoviesAndGenres(options);


            var movieOne = new MovieViewModel()
            {
                Name = "BestRatedMovieTest",
                Duration = 90,
                Director = "TestDirector",
                Storyline = "TestStoryline",
                ImageUrl = "TestImageUrl",
                Genre = "Comedy"
            };

            var movieTwo = new MovieViewModel()
            {
                Name = "SecondMovieTestName",
                Duration = 90,
                Director = "TestDirector",
                Storyline = "TestStoryline",
                ImageUrl = "TestImageUrl",
                Genre = "Comedy"
            };

            var collectionMovieViewModels = new List<MovieViewModel>() { movieOne, movieTwo };


            var mappingProviderMock = new Mock<IMappingProvider>();
            mappingProviderMock
                .Setup(x => x.MapTo<ICollection<MovieViewModel>>(It.IsAny<List<Movie>>()))
                .Returns(collectionMovieViewModels);


            using (var actAndAssertContext = new MovieManagementContext(options))
            {
                var sut = new MovieService(actAndAssertContext, mappingProviderMock.Object);
                var movies = await sut.GetLatestMoviesAsync();

                Assert.AreEqual(2, movies.Count());
                Assert.AreEqual("BestRatedMovieTest", movies.FirstOrDefault().Name);
            }
        }

1 Ответ

0 голосов
/ 07 мая 2019

Я создал пустую коллекцию и установил Callback метода для заполнения этой коллекции,

var collectionOfMovies = new List<Movie>();

var mappingProviderMock = new Mock<IMappingProvider>();
            mappingProviderMock
                .Setup(x => x.MapTo<ICollection<MovieViewModel>>(It.IsAny<List<Movie>>()))
                .Callback<object>(inputargs => collectionOfMovies = inputargs as List<Movie>);
...