Rhino Mocks - Использование Arg.Matches - PullRequest
20 голосов
/ 19 августа 2010

У меня есть функция, над которой я издеваюсь, которая принимает объект аргумента в качестве параметра. Я хочу вернуть результат на основе значений в объекте. Я не могу сравнивать объекты, так как Equals не переопределяется.

У меня есть следующий код:

_tourDal.Stub(x => x.GetById(Arg<TourGet>.Matches(y => y.TourId == 2), null)).Return(
                new Tour() 
                {
                    TourId = 2,
                    DepartureLocation = new IataInfo() { IataId = 2 },
                    ArrivalLocation = new IataInfo() { IataId = 3 }
                });

Это должно вернуть объект, указанный, когда предоставленный параметр имеет TourId 2.

Похоже, что это должно работать, но когда я запускаю его, я получаю следующее исключение:

При использовании Arg все аргументы должны быть определены с использованием Arg.Is, Arg.Text, Arg.List, Arg.Ref или Arg.Out. 2 аргумента ожидается, 1 был определен.

Есть идеи, что мне нужно сделать, чтобы решить эту проблему?

Ответы [ 2 ]

25 голосов
/ 19 августа 2010

Вам нужно использовать тот же синтаксис для вашего второго нулевого аргумента, что-то вроде этого (я не проверял это):

_tourDal.Stub(x => x.GetById(Arg<TourGet>.Matches(y => y.TourId == 2), Arg<TypeName>.Is.Null)).Return(
            new Tour() 
            {
                TourId = 2,
                DepartureLocation = new IataInfo() { IataId = 2 },
                ArrivalLocation = new IataInfo() { IataId = 3 }
            });
7 голосов
/ 19 августа 2010

Решено:

        _tourDal.Stub(x => x.GetById(new TourGet(2), null))
            .Constraints(new PredicateConstraint<TourGet>(y => y.TourId == 2), new Anything())
            .Return(
            new Tour() 
            {
                TourId = 2,
                DepartureLocation = new IataInfo() { IataId = 2 },
                ArrivalLocation = new IataInfo() { IataId = 3 }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...