33 votes

Que dois-je considérer lors du choix d'un cadre de simulation pour .Net

Il y a beaucoup de se moquer de cadres pour .Net certains d'entre eux ont été remplacées par d'autres qui sont mieux à tout point de vue. Cependant, il reste de nombreuses moqueries des cadres qui ont différents styles d'utilisation.

Le temps qu'il faut pour apprendre tous bien assez pour décider de la sorcière à utiliser est déraisonnable. Je ne crois pas que nous n'avons pas encore atteint un stade que l'on peut parler de la meilleure moqueur cadre. Alors, quelles questions devrais-je en posant sur le projet et moi-même pour aider à choisir la meilleure moqueur cadre de l'utiliser dans un cas donné?

Il serait également utile de savoir pourquoi vous choisissez les moqueries framework que vous utilisez actuellement et si vous êtes toujours heureux avec ce choix.

Est-il encore utile de vocabulaire à utiliser lorsque l'on compare les styles de tourner en dérision les cadres?

(J'ai limité cette question .Net, Java n'ont pas d'attributs ou de l'expression lambda, donc j'espère que les moqueries des cadres peuvent être mieux pour .Net puis Jave)

Résumé jusqu'à présent:

  • Si vous avez besoin de se moquer méthode statique, ou aucune des méthodes virtuelles, alors la seule option raisonnable est TypeMock, cependant il n'est pas gratuit et ne vous conduire à une bonne conception.
  • Rhino se moque de est une très bonne option si vous faites le TDD .e.g les objets que vous souhaitent, à se moquer de mettre en œuvre des interfaces. À l'heure actuelle, il semble être le "leader du marché"
  • Moq (introduction) devrait être considérée si vous êtes à l'aide de .NET 3.5 Moq peut être againing sur Rhino se moque de pour de nouveaux projets

Qu'ai-je manqué de ce résumé?

Donc ce qui motive le choix entre Rhino se moque et Moq, si vous êtes en utilisant .NET 3.5?


voir aussi:

"Que dois-je considérer lors du choix d'un framework injection de dépendance pour .NET?" peut également être intéressante car elle demande "l'autre côté" de la question.

21voto

Chris Holmes Points 5475

Alors, quelles questions devrais-je en posant sur le projet et moi-même pour aider à choisir la meilleure moqueur cadre de l'utiliser dans un cas donné?

Les questions que vous devriez poser des questions sur le projet: le projet A été développé avec des principes SOLIDES, ou pas? Est-ce un projet qui a couplage faible et une forte cohésion? Avoir de bonnes OO principes de l'été utilisés dans la construction du projet? Est un conteneur d'Injection de Dépendances-il utilisé? Le système a été codé en une Conception par la méthode du Contrat (en utilisant des Interfaces de fond)?

Si vous répondez oui à ces questions, alors vous pouvez utiliser un moqueur cadre comme RhinoMocks, qui est ce que certains appellent un "opiniâtres" cadre de. RhinoMocks, et quelques autres, se moquant de cadres, ont des opinions très arrêtées sur la façon dont un système doit être conçu pour que les objets se moque de lui. Un cadre comme RhinoMocks attend que votre projet soit conçu d'une certaine manière. Se moquant est certainement beaucoup plus facile avec RhinoMocks lorsque vous avez créé votre code de la bonne façon (pas de classes scellées, pas statique, l'utilisation massive d'interfaces virtuelles sur les méthodes de la classe, etc.)

Si vous répondez non à ces questions, ou si vous travaillez sur un système d'héritage avec beaucoup de très couplé classes, alors votre seul choix va être TypeMock, qui peut se moquer de tout, ou presque.

Il serait également utile de savoir pourquoi vous choisissez les moqueries framework que vous utilisez actuellement et si vous êtes toujours heureux avec ce choix.

J'ai choisi RhinoMocks parce qu'à l'époque (3 ans), il était clairement le plus mature se moquant de cadre avec le plus de fonctionnalités. Je suis resté avec elle parce qu'il a évolué au loin qui rend ma vie beaucoup plus facile (l'avènement de la AutoMocking récipient étant un pas de géant vers l'efficacité).

Ce que j'aime à propos de RhinoMocks, autre que l'ensemble des fonctionnalités et la facilité d'utilisation, c'est qu'il me guide vers une meilleure conception dans mon code. Je ne suis pas un parfait programmeur, et je vais faire des erreurs dans la conception. Mais des outils comme RhinoMocks et NHibernate aider à me guider vers une meilleure conception, parce que quand je fais des erreurs et créer une mauvaise conception, ces outils deviennent douloureux de travailler avec. NHibernate, par exemple, est pénible à travailler avec si vous avez une mauvaise conception de base de données. RhinoMocks est très pénible à travailler avec si vous avez une mauvaise conception de classe, ne sont pas en utilisant les interfaces, ne sont pas à l'aide du Cio... etc.

J'aime RhinoMocks parce que, au final, il m'aide à être un meilleur développeur, et pas seulement parce que je suis de tester mon code, mais parce que je suis façonner mon code - conception - dans une meilleure façon.

14voto

Kent Boogaart Points 97432

Je préfère Moq pour les projets .NET 3.5. Il est simple à utiliser et, selon mon expérience, il aide à produire des tests unitaires propres et clairs.

Il n'y a aucune raison technique pour laquelle vous ne pouvez pas utiliser plus d'un framework de simulation sur le même projet. Bien sûr, c'est bien de standardiser, mais certains tests peuvent se prêter mieux à certains frameworks.

9voto

Skeve Points 188

Que dois-je considérer lors du choix d'un moqueur cadre .Net

Un autre aspect à considérer, en plus de la conception de la base de code que vous souhaitez tester, est le degré de lisibilité de vos tests sont lors de l'utilisation des simulacres.

À cet égard, je suis en train de monter dans un vote pour NSubstitute - l'un des plus récents se moquant de cadres avec un très expressive de l'API (pas de lambda) et des fonctionnalités comparables avec Moq et Rhino se moque. Il a récemment atteint la version 1.0.

Un exemple d'utilisation (à partir de la NSubstitute page d'accueil):

//Create:
var calculator = Substitute.For<ICalculator>();

//Set a return value:
calculator.Add(1, 2).Returns(3);
Assert.AreEqual(3, calculator.Add(1, 2));

//Check received calls:
calculator.Received().Add(1, Arg.Any<int>());
calculator.DidNotReceive().Add(2, 2);

//Raise events
calculator.PoweringUp += Raise.Event();

Une comparaison détaillée de la lisibilité de tests à l'aide de RhinoMocks, Moq et NSubstitute est donné ici.

3voto

Ian Ringrose Points 19115

talons air intéressant et je pense qu'il peut être livré avec .NET V4. Je ne sais pas sorcière édition de developer studio, vous aurez besoin de l'utiliser. À l'heure actuelle, vous pouvez le télécharger à partir du lien ci-dessus.

Talons est une infrastructure légère pour bouts de test et de détours dans .NET qui est enterily basé sur les délégués, type coffre-fort, refactorable et le code source généré. Talons a été conçu de soutien le Code de Contrats à exécution rédacteur et fournir un minimum de frais généraux pour le Pex boîte blanche de l'analyse. Les talons peuvent être utilisés sur toute .Méthode NETTE, y compris non-virtuelle/méthodes statiques dans scellés les types.

(J'ai posté ceci comme un answser rathern puis l'ajouter à la quesion, que je n'ai jamais utilisé la Transperce et ne passent que quelques minutes à le regarder)

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