如何在单元测试中模拟 Automapper ProjectTo<> 方法?
How to mock Automapper ProjectTo<> method in Unit Tests?
我正在使用 ProjectTo<T>
方法从数据库中获取数据。
names = _mapper.ProjectTo<ItemNameDto>(query).ToList();
在单元测试中,我想将此方法模拟到 return 特定集合。
根据 this 问题的第二个答案 - 我发现我需要将所有参数传递给设置。
当我将 null 传递给第二个参数时 - 设置正常,但是当我将 null
传递给第三个参数时 - 设置没有 return 我想要的集合。
在这种特殊情况下,我应该将什么值传递给 Expression 参数?我真的不想用 It.IsAny<>
保留它,因为它对我来说太宽泛了。我想编写一个完全反映我的用例的设置。
_mapperMock
.Setup(c => c.ProjectTo(
It.Is<IQueryable<Item>>(x => x.HaveTheSameElements(filteredItems)),
It.IsAny<object>(),
It.IsAny<Expression<Func<ItemNameDto, object>>[]>()))
.Returns(filteredItemNameDtos.AsQueryable());
这是我要设置的方法签名。
IQueryable<TDestination> ProjectTo<TDestination>(IQueryable source, object parameters = null, params Expression<Func<TDestination, object>>[] membersToExpand);
要在没有提供 membersToExpand
的情况下模拟对 ProjectTo
的调用,您应该使用 It.Is
:
_mapperMock
.Setup(c => c.ProjectTo(
It.Is<IQueryable<Item>>(x => x.HaveTheSameElements(filteredItems)),
It.IsAny<object>(),
It.Is<Expression<Func<ItemNameDto, object>>[]>(x => x.Length == 0)))
.Returns(filteredItemNameDtos.AsQueryable());
x => x.Length == 0
表示一个空数组,框架在没有传递params
时实例化。
我正在使用 ProjectTo<T>
方法从数据库中获取数据。
names = _mapper.ProjectTo<ItemNameDto>(query).ToList();
在单元测试中,我想将此方法模拟到 return 特定集合。
根据 this 问题的第二个答案 - 我发现我需要将所有参数传递给设置。
当我将 null 传递给第二个参数时 - 设置正常,但是当我将 null
传递给第三个参数时 - 设置没有 return 我想要的集合。
在这种特殊情况下,我应该将什么值传递给 Expression 参数?我真的不想用 It.IsAny<>
保留它,因为它对我来说太宽泛了。我想编写一个完全反映我的用例的设置。
_mapperMock
.Setup(c => c.ProjectTo(
It.Is<IQueryable<Item>>(x => x.HaveTheSameElements(filteredItems)),
It.IsAny<object>(),
It.IsAny<Expression<Func<ItemNameDto, object>>[]>()))
.Returns(filteredItemNameDtos.AsQueryable());
这是我要设置的方法签名。
IQueryable<TDestination> ProjectTo<TDestination>(IQueryable source, object parameters = null, params Expression<Func<TDestination, object>>[] membersToExpand);
要在没有提供 membersToExpand
的情况下模拟对 ProjectTo
的调用,您应该使用 It.Is
:
_mapperMock
.Setup(c => c.ProjectTo(
It.Is<IQueryable<Item>>(x => x.HaveTheSameElements(filteredItems)),
It.IsAny<object>(),
It.Is<Expression<Func<ItemNameDto, object>>[]>(x => x.Length == 0)))
.Returns(filteredItemNameDtos.AsQueryable());
x => x.Length == 0
表示一个空数组,框架在没有传递params
时实例化。