Подтвердить что ты не робот

Rhino Mocks - Использование Arg.Matches

У меня есть функция, которую я издеваюсь, которая принимает объект аргумента в качестве параметра. Я хочу вернуть результат, основанный на значениях в объекте. Я не могу сравнивать объекты, поскольку 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. были определены.

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

4b9b3361

Ответ 1

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

_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 }
            });

Ответ 2

Решено:

        _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 }
            });