Les moqueries du rhinocéros :Comment puis-je simuler une méthode qui transforme son entrée ?

StackOverflow https://stackoverflow.com/questions/59396

  •  09-06-2019
  •  | 
  •  

Question

J'ai un objet d'accès aux données TransactionDao.Lorsque vous appelez TransactionDao.Save(transaction), j'aimerais qu'il définisse un indicateur transaction.IsSaved=true (c'est une simplification, la chose que j'essaie de faire n'est pas si banale).Alors, lorsque je me moque de mon TransactionDao avec RhinoMocks, comment puis-je indiquer qu'il doit transformer son entrée ?

Idéalement, j'aimerais écrire quelque chose comme ceci :

Expect.Call(delegate {dao.Save(transaction);}).Override(x => x.IsSaved=true);

Est-ce que quelqu'un sait comment faire ça?


Bien que j'aie eu une idée de la façon de procéder à partir de la réponse spécifiée ci-dessous, la signature de type réelle est désactivée, vous devez faire quelque chose comme ceci :En raison de ce que Mark Ingram a publié, la meilleure réponse semble être la suivante, même si personne ne l'a explicitement dit :

public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));
Était-ce utile?

La solution

Gorge,

La solution la plus simple, que j'ai trouvée, appliquée à votre question est la suivante :

Expect.Call(() => dao.Save(transaction))
    .Do(new Action<Transaction>(x => x.IsSaved = true));

Vous n'avez donc pas besoin de créer un délégué spécial ou quoi que ce soit d'autre.Utilisez simplement Action qui se trouve dans les bibliothèques standard .NET 3.5.

J'espère que cette aide.Frantisek

Autres conseils

Vous pouvez accomplir cela en utilisant le rappel Do :

Expect.Call(delegate {dao.Save(transaction);})
    .Do(x => x.IsSaved = true);

vous devez vous moquer de la transaction et la rendre vraie pour IsSaved, si vous pouvez bien sûr vous moquer de la transaction.

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top