c# .net unit-testing rhino-mocks

c# - Rhino Mocks-Usando Arg.Matches



.net unit-testing (2)

Tengo una función que me estoy burlando de que toma un objeto de argumento como un parámetro. Quiero devolver un resultado basado en los valores en el objeto. No puedo comparar los objetos ya que Equals no se anula.

Tengo el siguiente código:

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

Esto debería devolver el objeto especificado cuando el parámetro suministrado tiene un TourId de 2.

Parece que debería funcionar, pero cuando lo ejecuto, obtengo la siguiente excepción:

Cuando se usa Arg, todos los argumentos deben definirse usando Arg.Is, Arg.Text, Arg.List, Arg.Ref o Arg.Out. Se esperan 2 argumentos, se han definido 1.

¿Alguna idea de lo que necesito hacer para resolver esto?


Necesitas usar la misma sintaxis para tu segundo argumento nulo, algo como esto (no lo he probado):

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


Resuelto

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