首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个参数的FakeItEasy ReturnLazily方法

具有多个参数的FakeItEasy ReturnLazily方法
EN

Stack Overflow用户
提问于 2015-06-24 05:20:12
回答 1查看 901关注 0票数 3

使用FakeItEasy,我想伪造一个接口方法来返回一些自定义列表,该方法有4个以上的参数,方法的签名如下:

代码语言:javascript
复制
     IList<Employee> FindAll(DateTime dateFrom, DateTime dateTill, Guid locationId, Gender gender, int age);

虽然FakeItEasy有ReturnsLazily方法,它只支持4个参数,所以对于这5个参数方法,我不能使用ReturnsLazily功能。

代码语言:javascript
复制
    A.CallTo(() => repAssign.FindAll(A<DateTime>.Ignored,A<DateTime>.Ignored,A<Guid>.Ignored,A<Gender>.Ignored,A<Int>.Ignored))
         .ReturnsLazily((DateTime StartDate, DateTime EndDate, Guid locationId, Gender gender, int age) =>
         return list.Where(...some filters here as per arguments...).ToList();
        );

使用FakeItEasy,请建议如何对有4个以上参数的方法使用ReturnsLazily。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-24 06:29:20

您需要使用以IFakeObjectCall作为lambda参数并从那里中提取参数的重载。

如果需要更先进的决策,或者该方法有4个以上的参数,那么方便的方法就无法工作。使用以IFakeObjectCall代替的变体

代码语言:javascript
复制
 A.CallTo(() => repAssign.FindAll(
     A<DateTime>.Ignored,
     A<DateTime>.Ignored,
     A<Guid>.Ignored,
     A<Gender>.Ignored,
     A<Int>.Ignored))
.ReturnsLazily(call => 
    list
        .Where(x => call.GetArgument<Int>(4) > 1)
        .ToList()
);

参数可以通过GetArgument泛型方法提取,该方法以参数类型作为泛型参数和参数位置(基于0)。

另外,您应该考虑对这种方法进行重构。这许多参数最好封装在参数对象类中。

代码语言:javascript
复制
var filterParameters = new FilterParameters
{
    LocationGuid = guid,
    Gender = Gender.Female,
};
var result = repo.FindAll(filterParameters);

这将使新参数的引入更加容易,并将有助于避免类似的问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31018199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档