gpt4 book ai didi

linq - 使用 select 模拟(最小起订量)GetAllAsync linq 查询

转载 作者:行者123 更新时间:2023-12-05 07:52:26 27 4
gpt4 key购买 nike

这是我需要模拟的特定代码行。

IGenericRepository<Foo> _fooRepository;
var listOfIds = await _fooRepository.GetAllAsync(o => o.Ids);

这是获取一个 int 列表来表示此数据表中的 ID。换句话说,

select Ids from Table

FooRepository 是通过 IGenericRepository 实现的,全部使用 Entity Framework 。基础表中的 IDs 字段只是整数值,我试图从中获取一个 int 列表。我不想要任何其他列。

所以我尝试了以下无济于事:

1.

_listOfIds = new List<int> {1,2,3,4,5};

_fooRepositoryMock.Setup(o => o.GetAllAsync(
It.IsAny<Expression<Func<Foo, bool>>>()))
.Returns((Expression<Func<Foo, bool>> Predicate) =>
Task.FromResult(_listOfids.Where(Predicate.Compile()).ToList()
as ICollection<int>));

有了这个,IntelliSense 提示它不能从...转换

'System.Func<Foo, Bool> to System.Func<int, int, bool>"

我一开始尝试弄乱进出 Func 委托(delegate)的不同类型。但我仍然遇到同样的错误。

2.

然后我尝试只使用默认值,因为我并不特别介意它是否完全测试了这条线。 ID 列表稍后将在该方法中使用。但我需要模拟它,因为如果它为 null,则会导致测试方法的进一步测试失败。

_listOfids= new List<int> {1,2,3,4,5};
_fooRepositoryMock.SetReturnsDefault(_listOfIds);

由于某些原因,调试时 listOfIds 保持为空。

我有点卡在这个上面了。我唯一能想到的就是将这行代码粘贴到辅助方法中并模拟辅助方法。但这似乎只是为了通过测试而重写代码的一种非常劣质的方法。

最佳答案

您不必为 Returns 方法调用指定参数。 Moq 还包括另一种设置异步方法结果的方法。

_fooRepositoryMock.Setup(o => o.GetAllAsync(It.IsAny<Expression<Func<Foo, int>>>()))
.ReturnsAsync(idList);

关于linq - 使用 select 模拟(最小起订量)GetAllAsync linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33634582/

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