Как написать код модульного тестирования для метода типа Asyn c, который использует внутри него запрос linq - PullRequest
0 голосов
/ 19 февраля 2020

Мой проект использует mvc5 в шаблоне хранилища, и теперь у меня есть метод в ScreenManager. Теперь я должен написать тестовый код для метода типа asyn c, и внутри него используется запрос linq для моего класса репозитория. Я уже написал тестовый код (см. Ниже) для него, но он не работал. Пожалуйста, помогите мне выйти из этой проблемы.

Ошибка:

Тест не пройден - ActionHistoryAsync_WhenCalled_ReturnSceeningActionViewModel Сообщение: метод теста ScreenMangerTests.ActionHistoryAsync_WhenCalled_ReturnSclInIgnationOctionEctionE реализовать. IDbAsyncEnumerable. Для асинхронных операций Entity Framework могут использоваться только источники, которые реализуют IDbAsyncEnumerable. Для получения дополнительной информации см. http://go.microsoft.com/fwlink/?LinkId=287068

У меня есть хранилище с именем

private readonly IScreenActionRepository _iScreenActionRepository;

И я передаю его через моего конструктора.

public ScreenManager(IScreenActionRepository iScreenActionRepository)
{
  _iScreenActionRepository= iScreenActionRepository;
}

И, наконец, мой исполняемый метод выглядит следующим образом:

 public async Task<IEnumerable<ScreenActionViewModel>> ActionHistoryAsync(long screenId)
        {
                   var result = from a in _iScreenActionRepository.FindAll(s => s.ScreenId == screenId && s.ScreenType == "T")                         
                         select new ScreenActionViewModel
                         {
                             Id = a.Id,
                             ScreenId = a.ScreeningId,
                             ScreeningType = a.ScreenType,
                             Description = a.Description,
                             ActionDateTime = a.ActionDateTime,
                             ActionBy = a.ActionBy,
                             RoleName = a.RoleName,
                         };

            var z = result.ToList();
            return await result.ToListAsync();
        }

И мой код тестирования следующий

[DataTestMethod]
public async Task ActionHistoryAsync_WhenCalled_ReturnScreenActionViewModel()
        {
    Mock<IScreenActionRepository> _screenActionRepositoryMock= new Mock<IScreenActionRepository>();
            long screenId = 1;
            var screenAction = new List<ScreenAction>
            {
                new ScreenAction
                {
                    ScreenId = 1,
                    ScreenType = "TP",
                    Description = "",
                    ActionDateTime = DateTime.Now,
                    ActionBy = 3,
                    RoleName = "Investigator"
                }
            };           
            _screenActionRepositoryMock
                .Setup(c => c.FindAll(It.IsAny<Expression<Func<ScreenAction, bool>>>()))
                .Returns(new Func<Expression<Func<ScreenAction, bool>>, IQueryable<ScreenAction>>(
                    expr => screenAction.Where(expr.Compile()).AsQueryable()));

            //Act
            var result = await _manager.ActionHistoryAsync(screenId);

            //Assert
            Assert.AreEqual(result.First().ActionBy, 3);
            Assert.AreEqual(result.First().RoleName, "Investigator");
            Assert.AreEqual(result.First().UserFullName, userList.First().FullName);
        }
...