C# модульный тест, имитирующий ошибки DbSet с IQueryable, не реализующий IAsyncEnumerable - PullRequest
0 голосов
/ 05 августа 2020

У меня есть тест, приведенный ниже, и я использую стандартную имитацию для DbSet / Context. Когда тест запускается, он терпит неудачу, поскольку в нем говорится, что «Исходный IQueryable не реализует IAsyncEnumerable Team. Для асинхронных операций Entity Framework можно использовать только источники, реализующие IAsyncEnumerable».

        public async Task Get_team_name_with_valid_search_term_returns_team_names()
        {
            // Arrange
            var data = new List<Team>
            {
                new Team {Name = "Leeds"},
                new Team {Name = "Glasgow"}
            }.AsQueryable();

            var mockSet = new Mock<DbSet<Team>>();

            mockSet.As<IQueryable<Team>>().Setup(m => m.Provider).Returns(data.Provider);
            mockSet.As<IQueryable<Team>>().Setup(m => m.Expression).Returns(data.Expression);
            mockSet.As<IQueryable<Team>>().Setup(m => m.ElementType).Returns(data.ElementType);
            mockSet.As<IQueryable<Team>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

            var mockContext = new Mock<RadContext>();
            mockContext.Setup(c => c.Team).Returns(mockSet.Object);

            var service = new ITeamSearchService(mockContext.Object);

            // Act
            var result = await service.GetTeamName("Gla");

            // Assert
        }

Сама служба вполне простой

 public async Task<List<SearchTeamResponse>> GetTeamName(string searchTerm)
      {
            if (searchTerm == null)
            {
                throw new ArgumentNullException(nameof(searchTerm));
            }

            var query = await _radContext.Team.Where(x => x.Name.StartsWith(searchTerm))
                .OrderBy(x => x.Name)
                .ToListAsync();

            var json = JsonConvert.SerializeObject(query);

            var result = JsonConvert.DeserializeObject<List<SearchTeamResponse>>(json);

            return result;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...