gpt4 book ai didi

C# 单元测试 - 实际 : (null) Result using List in xUnit with Moq Framework

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:14 25 4
gpt4 key购买 nike

你好,

我是使用 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

提前致谢。

最佳答案

你会收到一条错误信息:

源 IQueryable 没有实现 IAsyncEnumerable。只有实现 IAsyncEnumerable 的源才能用于 Entity Framework 异步操作。

基于此Blog post ,他使用 Task.FromResult 解决了这个问题。所以你的服务代码应该是这样的:

public async Task<IEnumerable<SearchSelect>> SelectInfoByName(string info)
{
var infoByName = searchInfoRepo.SearchInfoByName(info);

return await Task.Result(infoByName.Select(info => new SearchSelect
{
text = info.Name,
value = info.InfoId
}).ToListAsync());
}

然后在您的任务方法中,尝试使用断言计数长度而不是比较它们的值。

Assert.True(expectedResult.Count(), result.Count());

关于C# 单元测试 - 实际 : (null) Result using List in xUnit with Moq Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50742408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com