2010-04-14 7 views
26

J'ai besoin de choisir un cadre fictif pour un nouveau projet.Rhino simulé vs Typemock vs JustMock vs

Quels sont les avantages et les inconvénients de ces cadres? Un tableau de comparaison?

Je sais que JustMock est i en version bêta, mais il est l'air très bien en ce moment (très similaire à Typemock)

Edit: I'v Qu'en est-MS Mole?

+3

Ne pas oublier moq. C'est mon prefere. – Will

+3

Moq est le meilleur que j'ai utilisé. Favorise un bon code testable propre aussi. http://stackoverflow.com/questions/64242/rhino-mocks-typemock-moq-or-nmock-which-one-do-you-use-and-why – Finglas

+1

Il y a aussi FakeItEasy qui fournit des faux/stubs/mocks naturels comme Rhino mais une syntaxe plus propre et un meilleur dsl contextuel pour la configuration. http://code.google.com/p/fakeiteasy –

Répondre

21

Avant il y avait JustMock cette question a été posée et le answers can be found here. Il ya un très bon Mocking framework comparison - il n'a pas encore JustMock mais vous pouvez voir la syntaxe et les capacités de chaque framework .NET Mocking.

RhinoMocks (et Moq) sont à la fois open source libre d'utiliser des projets qui peuvent créer des objets faux en héritant du type - ce qui signifie qu'ils ne peuvent pas faux méthodes statiques, struct et classes scellées.

Typemock Isolator Utilise le profileur CLR pour intercepter les appels .NET et les modifier pendant l'exécution et peut simuler pratiquement n'importe quoi. Typemock peut également truquer des objets que vous ne pouvez pas "atteindre" à partir du test car ils sont instanciés dans le code de production. Certains l'appellent "magie noire" mais d'autres trouvent la possibilité de simuler pratiquement n'importe quoi - y compris les bibliothèques tierces et le code existant - un must.

JustMock est un nouveau joueur et maintenant seulement en version bêta - il a certains Typemock isolator et peut fonctionner sans l'API profileur - dans ce mode, il est comme RhinoMocks. Il reste encore à découvrir quelle est la taille réelle des capacités de Typemock Isolator. À l'heure actuelle, il semble que ce soit un bon début dans la bonne direction, mais il reste encore du chemin à parcourir avant que cela ne devienne une option valable.

+0

Moq peut être utilisé pour les talons, les faux et les objets MOCK. – Finglas

+0

Tous les cadres moqueurs peuvent faire cela - la question est de savoir quels objets –

+1

JustMock et TypeMock est livré avec un pricetag ci-joint et qui vaut la peine d'être mentionné. – Johan

1

Je ne vais pas vous dire quel est le meilleur parce que chacun a ses avantages et ses inconvénients. J'ai toujours utilisé Rhino Mocks parce que c'est gratuit et qu'il y a une grande communauté autour et facile de trouver de l'aide.

TypeMock n'est pas gratuit (je suppose). Cependant TypeMock est génial si vous voulez par exemple tester le code existant avec des types privés ou statiques de membres. D'autres cadres moqueurs ne peuvent pas le faire. Un inconvénient est qu'il ne vous force pas à écrire du code testable qui a d'autres avantages que la testabilité. Je ne connais pas JustMock donc je ne peux pas vous dire comment cela fonctionne.

Je vous conseille de les essayer tous et d'en choisir un avec lequel vous vous sentez à l'aise. Toutefois, si vous devez tester un code existant, choisissez TypeMock.

J'espère que d'autres vous donneront plus de détails.

14

Je suis récemment passé de RhinoMocks à Moq.

Les deux ont des capacités similaires mais Moq a beaucoup API propre

2

Voir aussi: https://stackoverflow.com/questions/37359/what-c-mocking-framework-to-use/2608634#2608634

Je suis actuellement des tests unitaires dans Moq, et je dois dire que cela fonctionne assez bien! - Rephrase: ça marche super bien! Je n'ai utilisé aucun des autres cadres de moquerie que vous mentionnez, donc je ne peux pas vous donner de comparaison. Mais je peux dire que je suis content d'avoir choisi Moq comme mon premier cadre de simulation. Les expressions lamda sont vraiment sympas et elles sont aussi assez légères et faciles à lire (la syntaxe d'enregistrement/relecture de la plupart des autres frameworks de moquerie ne rend pas vraiment votre lisibilité)

En plus de ça (et c'est un peu hors sujet) J'utiliserai Ninject dans un futur proche comme IoC Container, et les deux frameworks vont de pair. Ninject a aussi Lamda et il fournit même un support de conteneur moqueur automatique pour Moq (en utilisant une extension). Donc, si vous prévoyez également d'utiliser un conteneur IoC vous pouvez vérifier cette combinaison impressionnante:]

11

[Avertissement - Je travaille à Telerik]

Juste quelques points sur JustMock. Son API est plus proche de l'API de Moq que celle de RhinoMocks, donc si vous êtes familier avec Moq, vous ne devriez pas avoir de problèmes pour apprendre JustMock. Ce que nous avons essayé de faire mieux dans JustMock, c'est d'avoir une meilleure histoire en se moquant des appels séquentiels par exemple. De plus, en tant que personne déjà mentionnée, JustMock permet de se moquer des classes et des méthodes/propriétés statiques, des classes scellées, des méthodes et des propriétés non virtuelles et ainsi de suite en utilisant la même syntaxe Moq. Aussi, grâce à cela dans JustMock, il est possible de faire des moqueries partielles. Btw, la «magie noire» que Dror a mentionnée est également possible lors de l'utilisation de JustMock si vous faites directement référence à l'ensemble Telerik.CodeWeaver.Hook mais malheureusement cela n'est pas documenté pour le moment. Si quelqu'un veut faire cela, il pourrait ouvrir un ticket de support et nous serons heureux de vous aider.

Espérons que cela aide.

8

Vous pouvez également consulter le document Microsoft Moles, une structure d'isolation pour .NET qui permet de remplacer toute méthode .NET par un délégué personnalisé.

Moles a une version qui peut être utilisé pour des projets commerciaux et est pris en charge dans Visual Studio 2008 et 2010.

+1

c'est moche au code et tous basés sur XML ... GROSS. – PositiveGuy