Мой проект использует 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);
}