猿问

C# 单元测试 - 实际:(null) 在 xUnit 中使用 List 和 Moq 框架的结果

我是在 C# 中使用 xUnit 和 Moq 框架进行单元测试的新手。


我正在尝试测试一个方法,其中它返回列表该方法负责从存储库类中的 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


海绵宝宝撒
浏览 242回答 2
2回答

qq_花开花谢_0

当你得到你的结果时,你会要求 .AsyncState。改为请求 .Result ,以获得实际结果:var&nbsp;result&nbsp;=&nbsp;selectInfo.SelectInfoByName("info").Result;
随时随地看视频慕课网APP
我要回答