Добрый день,
Я новичок в модульном тестировании с использованием xUnit и Moq Framework на C #.
Я пытаюсь протестировать метод, в котором возвращается список, за который отвечает методвозвращение списка информации из метода Queryable внутри класса репозитория.
Вот мой метод тестирования.
[Fact]
public void SelectInfoByName_InfoHasValue_ReturnInfoSelect()
{
var service = new Mock<ISearchInfoRepository>();
var selectInfo = new SelectInfoService(null, service.Object);
service.Setup(s => s.SearchInfoByName("info")).Returns(new List<Info>
{
new Info{ Name = "name1",InfoId = 1},
new Info{Name = "name2",InfoId = 2}
}.AsQueryable);
var expectedResult = new List<Info>
{
new Info{Name = "name1", InfoId = 1},
new Info{Name = "name2", InfoId = 2}
};
var result = selectInfo.SelectInfoByName("info").Result;
Assert.Equal(expectedResult, result);
}
Вот мой SelectInfoByName
, отвечающий за возврат списка информации по имени
public async Task<IEnumerable<SearchSelect>> SelectInfoByName(string info)
{
var infoByName = searchInfoRepo.SearchInfoByName(info);
return await infoByName.Select(info => new SearchSelect
{
text = info.Name,
value = info.InfoId
}).ToListAsync();
}
Наконец, вот мой репозиторий или класс хранения, где он взаимодействует с базой данных с помощью EF.
// storage or repo class
public IQueryable<Info> SearchInfoByName(string info)
{
return infoRepo.Info().Where(info => info.Name.Contains(name.Trim().ToLower()));
}
Примечание: Измените с .AsyncState
на .Result
, но все же фактическое значение равно null
Заранее спасибо.