2015-06-24 1 views
2

С FakeItEasy, я хочу поддельный метод интерфейса, чтобы вернуть некоторые пользовательский список, метод имеет более 4 аргументов, подпись методы заключается в следующем:FakeItEasy ReturnLazily метода более 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, пожалуйста, подсказывают, как использовать ReturnsLazily методов, который имеет более 4 аргумента.

ответ

3

Вам нужно использовать перегрузку, которая принимает IFakeObjectCall в качестве параметра лямбды и извлекать аргументы из 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).

На боковой ноте вы должны рассмотреть возможность реорганизации такого метода. Это много параметров лучше заворачивают в parameter object class:

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

Это позволит введение новых параметров значительно проще и поможет избежать проблем, как этот.

+0

Благодарим за быстрый ответ. Это очень полезно для меня. –

Смежные вопросы