У меня есть функция, над которой я издеваюсь, которая принимает объект аргумента в качестве параметра. Я хочу вернуть результат на основе значений в объекте. Я не могу сравнивать объекты, так как 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 определено.
Есть идеи, что мне нужно сделать, чтобы решить эту проблему?
Вам нужно использовать тот же синтаксис для вашего второго нулевого аргумента, что-то вроде этих строк (я не тестировал это):
_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 }
});
Решено:
_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 }
});