2010-08-19 3 views
20

J'ai une fonction que je moque qui prend un objet argument en paramètre. Je veux retourner un résultat basé sur les valeurs de l'objet. Je ne peux pas comparer les objets car Equals n'est pas annulé.Rhino Mocks - Utilisation de Arg.Matches

Je le code suivant:

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

Cela devrait retourner l'objet spécifié lorsque le paramètre fourni a une TourId de 2.

Cela ressemble à ça devrait fonctionner, mais quand je le lance, Je reçois l'exception suivante:

Lorsque vous utilisez Arg, tous les arguments doivent être définis à l'aide Arg.Is, Arg.Text, Arg.List, Arg.Ref ou Arg.Out. 2 arguments attendus, 1 ont été définis.

Des idées ce que je dois faire pour résoudre ceci?

Répondre

24

Vous devez utiliser la même syntaxe pour votre second argument null, quelque chose le long de ces lignes (je ne l'ai pas testé):

_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

C'est la bonne réponse. Je le sais, j'ai écrit ce message d'erreur ... –

6

Résolu:

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

vous ne devriez pas passer d'arguments dans le stub si vous appelez des contraintes après, parce que les arguments sont ignorés mais sont source de confusion pour le lecteur. –

+0

Cela a vraiment fonctionné pour moi, merci. – ShahidAzim