如何解决如何在单元测试中模拟Automapper ProjectTo <>方法?
names = _mapper.ProjectTo<ItemNameDto>(query).ToList();
在单元测试中,我想模拟该方法以返回特定的集合。
基于对this问题的第二个答案-我认为我需要将所有参数传递给设置。
当我将null传递给第二个参数时-设置正常,但是当我将null
传递给第三个参数时-设置不会返回我想要的集合。
在这种特殊情况下,应将什么值传递给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);
解决方法
要模拟未提供ProjectTo
的{{1}}的呼叫,应使用membersToExpand
:
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
时实例化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。