2009-03-27 8 views
43

Je ne trouve pas de comparaison fonction par fonction spécifique de Moq et Rhino. Toutes les questions sont "qui préférez-vous et pourquoi?", Ou "voici comment vous faites un simple simulacre de rhinocéros et comment cela se fait en moq".Quelles sont les capacités de Moq et Rhino.mocks?

Je ne peux pas trouver une comparaison en profondeur partout. Je suis conscient des différences de syntaxe, je ne cherche pas de réponses à ce sujet. Je suis à la recherche d'une comparaison de capacités. Par exemple:

  • Rhino a Expect.On() pour taraudée moqueur. Est-ce que Moq peut faire ça? Qu'en est-il de Multi-mocking (mettant en œuvre plusieurs interfaces avec un simulacre). Est-ce que Moq peut faire ça?

  • Je crois Moq peut maintenant se moquer de membres protégés. Est-ce que Rhino peut faire ça?

Modifier: J'ai fini par regarder quelques-uns des autres cadres .Net ainsi.

+0

voir aussi http://stackoverflow.com/questions/642620/what-should-i-consider-wh-choosing-a-mocking-framework-for-net –

+0

- Cochez [ici] (http: // code .google.com/p/moq/wiki/QuickStart) pour les fonctionnalités moq - Cochez [ici] (http://ayende.com/projects/rhino-mocks.aspx) pour les caractéristiques de Rhino Mocks – rguerreiro

Répondre

88

Merci à ceux qui ont répondu au cours des dernières semaines. J'ai fini par écrire un article sur mes découvertes, car je devais tellement creuser qu'il me semblait que je pouvais aussi bien les résumer dans l'espoir d'aider les autres. Le tableau I posté organise mes conclusions:

alt text

Une mise en garde, que je touchais dans le billet de blog, est que le graphique est utile pour vérifier les capacités, mais les avantages réels à la plupart des cadres sont leur uniques fonctionnalités. J'ai choisi Moq à la fin en raison de l'API facile à utiliser. En outre, toutes les informations sont sujettes à des erreurs et des changements - si vous n'êtes pas d'accord avec quelque chose sur le tableau, s'il vous plaît poster un commentaire.

+0

J'ai mis à jour le graphique légèrement. Il y aura peut-être quelques révisions au cours de la prochaine période, j'ai d'autres éléments de ligne qui pourraient être ajoutés. – womp

+3

+1 joli tableau, fait un bon résumé – zombat

+0

Hey @womp, pouvez-vous s'il vous plaît télécharger le tableau? Le lien redirige vers un signe japonais ;-) –

2

Je ne suis pas un expert par tout moyen, mais je crois que le Rhino a ajouté une partie de la syntaxe Moq de telle sorte que la courbe d'apprentissage a été réduit à ce que vous attendez avec UVM. J'ai travaillé avec les deux avec des tests et une partie de la syntaxe était presque identique. J'allais initialement avec MoQ comme c'était plus facile, mais mon bourgeon m'a montré les dernières mises à jour et à quel point elles étaient similaires. Je te fais juste savoir.

+0

Je trouve effectivement que cette est l'une des choses qui rendent Rhino plus difficile. Presque toute la documentation est pour les anciennes syntaxes, donc vous finissez par les mélanger en regardant les exemples, conduisant à toutes sortes d'erreurs étranges:/ – womp

+2

D'accord.Il semble qu'ils ont essayé de faire certaines choses de multiples façons sans enlever la «vieille» façon de le faire. Je suppose que c'est pour la compatibilité. Honnêtement, j'ai une meilleure compréhension du MoQ juste parce qu'il n'essaie pas de différencier un Mock ou un Fake et pas de syntaxe funky. MoQ est plutôt sympa avec ça – rball

1

Rhino a GetArgumentsForCallsMadeOn() qui l'OMI rend plus facile de vérifier les arguments dans certains cas.

-1

Je pourrais ajouter « Vérification du comportement » dans ces derniers. Cela semble être la plus grande limitation de Moq, que Rhino (pas sûr des autres) n'a aucun problème avec.

+2

Qu'est-ce qui limite la vérification du comportement dans Moq? Je n'ai encore rencontré aucune limite. Il a Verify() et VerifyAll(), et vous pouvez définir n'importe quel appel de Setup() pour être vérifiable indépendamment de la valeur de retour. – womp

0

Juste pour être complet, je constate qu'il ya maintenant NMock3 sur CodePlex. Il a une migration facile de NMock2, il suffit de remplacer la référence à NMock2.dll avec une référence à NMock3.dll. Il ajoute la sécurité de type et le support pour le refactoring.

Questions connexes