8
votes

Rhino Mocks - Définir une propriété si une méthode est appelée

Y a-t-il une manière avec des simulacres de rhinocéros pour définir une propriété d'un talon si une méthode est appelée.

quelque chose comme ceci: (faux code en gras)

CallMonitor.Expective (x => x.Hangup ()). setProperty (callmonitor.inacall = false) ; ;

La méthode de raccrochage retourne annuler et je ne peux pas vraiment changer cela. Mais je veux que mon talon sache que l'appel a été raccroché lorsque le raccroche est appelé.


0 commentaires

4 Réponses :


1
votes

Il pourrait y avoir des conditions dans lesquelles vous auriez besoin de le faire, mais j'attendrais généralement que vous alliez simplement instruminer votre simulation / talon afin qu'il renvoie les valeurs appropriées en réponse à votre code. Les seules exceptions à cela que je peux penser sont des simulacres partiels où vous testez une partie d'une classe et souhaitez vous moquer des autres parties.

Définir une maquette sur une propriété est assez facile. xxx

si CallMonitor est un talon, puis vous pouvez définir la propriété directement. < / p> xxx


0 commentaires

1
votes

oui fort>, vous pouvez utiliser la méthode Callback STRY>:

 callMonitor.Expect(x => x.HangUp()).Callback(() => callMonitor.InCall = false);


3 commentaires

Exactement ce que j'aurais écrit (si j'avais rencontré cette question il y a 6 minutes;)


Abus horrible du mécanisme de rappel. Il est difficile de dire, car il n'y a pas beaucoup d'informations dans le poteau, mais je pense que l'OP n'est pas assez concentré dans les tests. Lisez les précautions d'Ayende sur l'utilisation de rappels à ayende.com/wiki/ (S (zwkmge45vdgkgvznp13mgc55)) / ...


FWIW - Le rappel est censé être utilisé pour évaluer si l'attente a été satisfaite ou non, de ne pas faire de calcul arbitraire.



-1
votes

Je ne suis pas expert de Rhinomocks, mais je crois que cela devrait fonctionner. XXX


1 commentaires

Je crois que ce n'était pas ce qu'il a demandé. Il a demandé s'il existe un moyen de donner la méthode de raccrochage une implémentation impromptue qui définit la propriété Incall sur FALSE lorsque la méthode de raccourci est appelée. Ce que vous avez, la méthode inacall reviendra de faux peu importe si la méthode de raccrochage était appelée ou non.



11
votes

Vous pouvez utiliser la méthode "lorsque" appliquée "pour exécuter votre propre code lorsqu'un talon est appelé; Assurez-vous que cela devrait fonctionner avec des moqueurs aussi. Selon la documentation, lorsque la mise à niveau est remplacée / mise à niveau de rappel.

callMonitor.Expect(x => x.HangUp())
.WhenCalled(invocation => callMonitor.InCall = false);


6 commentaires

Toujours un abus, même si le nom de la méthode a changé. Lorsque le rappel, comme un rappel, est destiné à être utilisé dans une évaluation de l'attente avancée, de ne pas faire de calcul arbitraire.


Que recommanderiez-vous à la place? Un test de test roulé à la main double?


En fait, j'aimerais voir le test. Il me semble que si le test est suffisamment concentré, il peut ne pas y avoir de besoin.


Pour voir le test, voir cette question: Stackoverflow. com / questions / 1349324 / ... s'il y a une "bonne façon" alors j'aimerais le savoir.


TVANFosson: Je l'ai utilisé dans quelques cas pour définir des variables locales dans des tests, bien que cela ne soit généralement pas destiné à définir des propriétés sur un moqueur / talon comme dans ce cas. Cela ne me pose pas encore de problèmes, mais j'aimerais comprendre pourquoi cela est considéré comme un abus? Y a-t-il une forme de documentation canonique pour les moqueurs de rhinocéros, qui dit "tu n'as pas abus à l'abus quand"? (Question sérieuse! Je trouve que la documentation des moqueurs de Rhino est un peu rapide et lâche + dispersée partout). Acclamations.


Je suis d'accord avec Mark. Si c'est mauvais, j'aimerais savoir pourquoi. Pour que mon test fonctionne, j'ai besoin de simuler l'appareil qui raccroche un appel. Cela nécessite que quelque chose se passe lorsque la méthode Hangup () est appelée. S'il y a un meilleur moyen de le faire, je veux le savoir pour que je puisse faire ce droit.