FakeItEasy ReturnLazily具有超过4个参数的方法 [英] FakeItEasy ReturnLazily with more than 4 arguments method

查看:100
本文介绍了FakeItEasy ReturnLazily具有超过4个参数的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

With FakeItEasy, I want to fake an interface method to return some custom list, the method has more than 4 arguments, signature of method is this:

     IList<Employee> FindAll(DateTime dateFrom, DateTime dateTill, Guid locationId, Gender gender, int age);

虽然FakeItEasy具有ReturnLazily方法,该方法仅支持4个参数,所以对于这5个参数方法,我不能使用ReturnLazily功能.

While FakeItEasy has ReturnsLazily method which has supports till only 4 arguments, so for this 5 arguments method I cannot use ReturnsLazily functionality.

    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个以上参数的方法建议如何使用ReturnLazily.

With FakeItEasy, please suggest how to use ReturnsLazily for methods which has more than 4 arguments.

推荐答案

您需要使用将IFakeObjectCall作为lambda参数的重载,并从

You need to use overload that takes IFakeObjectCall as lambda parameter and extract arguments from there:

如果需要更高级的决策,或者该方法具有4个以上的参数,那么便捷方法将不起作用.请改用采用IFakeObjectCall

 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开始).

Arguments can be extracted via GetArgument generic method which takes argument type as generic parameter and argument position (0-based).

另一方面,您应该考虑重构这种方法.最好将这些参数包装到参数对象类:

On a side note, you should consider refactoring of such method. This many parameters are better wrapped into parameter object class:

var filterParameters = new FilterParameters
{
    LocationGuid = guid,
    Gender = Gender.Female,
};
var result = repo.FindAll(filterParameters);

这将使新参数的引入更加容易,并有助于避免出现此类问题.

This will make introduction of new parameters much easier and will help avoid issues like this one.

这篇关于FakeItEasy ReturnLazily具有超过4个参数的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆