FakeItEasy ReturnLazily 具有超过 4 个参数的方法
FakeItEasy ReturnLazily with more than 4 arguments method
使用 FakeItEasy,我想伪造一个接口方法到 return 一些自定义列表,该方法有超过 4 个参数,方法签名是这样的:
IList<Employee> FindAll(DateTime dateFrom, DateTime dateTill, Guid locationId, Gender gender, int age);
虽然 FakeItEasy 有 ReturnsLazily 方法,它只支持 4 个参数,所以对于这个 5 个参数的方法,我不能使用 ReturnsLazily 功能。
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。
您需要使用将 IFakeObjectCall
作为 lambda 参数的重载并从 there:
中提取参数
If more advanced decision-making is required, or the method has more than 4 parameters, the convenience methods won't work. Use the variant that takes an IFakeObjectCall
instead
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 开始)。
附带说明一下,您应该考虑重构这种方法。这么多参数最好包装成 parameter object class:
var filterParameters = new FilterParameters
{
LocationGuid = guid,
Gender = Gender.Female,
};
var result = repo.FindAll(filterParameters);
这将使引入新参数变得更加容易,并有助于避免此类问题。
使用 FakeItEasy,我想伪造一个接口方法到 return 一些自定义列表,该方法有超过 4 个参数,方法签名是这样的:
IList<Employee> FindAll(DateTime dateFrom, DateTime dateTill, Guid locationId, Gender gender, int age);
虽然 FakeItEasy 有 ReturnsLazily 方法,它只支持 4 个参数,所以对于这个 5 个参数的方法,我不能使用 ReturnsLazily 功能。
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。
您需要使用将 IFakeObjectCall
作为 lambda 参数的重载并从 there:
If more advanced decision-making is required, or the method has more than 4 parameters, the convenience methods won't work. Use the variant that takes an
IFakeObjectCall
instead
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 开始)。
附带说明一下,您应该考虑重构这种方法。这么多参数最好包装成 parameter object class:
var filterParameters = new FilterParameters
{
LocationGuid = guid,
Gender = Gender.Female,
};
var result = repo.FindAll(filterParameters);
这将使引入新参数变得更加容易,并有助于避免此类问题。