43 votes

Rhino Mocks reçoit l'argument, le modifie et le renvoie ?

J'essaie d'écrire quelque chose comme ça :

myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; });

Je veux obtenir l'objet réel qui est passé à la moquerie, le modifier et revenir en arrière.

Ce scénario est-il possible avec Rhino Mocks ?

104voto

Darin Dimitrov Points 528142

Vous pouvez utiliser la méthode WhenCalled comme ceci :

myStub
    .Stub(_ => _.Create(Arg<Invoice>.Is.Anything))
    .Return(null) // will be ignored but still the API requires it
    .WhenCalled(_ => 
    {
        var invoice = (Invoice)_.Arguments[0];
        invoice.Id = 100;
        _.ReturnValue = invoice;
    });

puis vous pouvez créer votre talon comme suit :

Invoice invoice = new Invoice { Id = 5 };
Invoice result = myStub.Create(invoice);
// at this stage result = invoice and invoice.Id = 100

3voto

mggSoft Points 771

Je n'avais pas besoin d'ajouter IgnoreArguments() pour éviter d'utiliser Return(). C'est ma méthode d'origine :

List<myEntity> GetDataByRange(int pageSize, int offsetRecords);

Voici mon exemple simulé :

_Repository.Stub(x => x.GetDataByRange(Arg<int>.Is.Anything, Arg<int>.Is.Anything))
           .WhenCalled(x => {
                              var mylist = entitiesList?.Skip((int)x.Arguments[1])?
                                                  .Take((int)x.Arguments[0])?.ToList();
                              x.ReturnValue = mylist;   
                            });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X