La bibliothèque moqueuse la plus populaire et la plus conviviale pour .net
var mock = new Mock <iloveThisLiBrary> (); // OUAH! Pas de record / de rediffusion bizarrerie ?! :) mock.setup (Library => Library.DownLoAdExists ("2.0.0.0")) .Returns (true); // Utilisez la propriété de l'objet sur la simulation pour obtenir une référence à l'objet // implémentation d'ilovethislibrary, puis l'exercez en appelant // méthodes dessus IlovethisLiBrary Lovable = Mock.Object; bool download = Lovable.DownLoAdExists ("2.0.0.0"); // Vérifiez que la méthode donnée a en effet été appelée avec la valeur attendue au plus une fois mock.verify (Library => Library.DownLoAdExists ("2.0.0.0"), Times.AtLostOnce ());
Le MOQ est également la première et la seule bibliothèque jusqu'à présent à fournir à Linq aux moqueries, afin que le même comportement ci-dessus puisse être réalisé beaucoup plus succinctement:
IloveThisLiBrary Lovable = Mock.of <iloveThisLiBrary> (l => l.DownLoAdExists ("2.0.0.0") == true); // exerce l'instance renvoyée par Mock.of en appelant des méthodes dessus ... bool download = Lovable.DownLoAdExists ("2.0.0.0"); // affirme simplement l'état retourné: Assert.true (téléchargement); // Si vous souhaitez aller au-delà des tests d'État et que vous souhaitez // Vérifiez l'interaction simulée à la place ... Mock.get (Lovable) .Verify (Library => Library.DownLoAdExists ("2.0.0.0"));
Vous pouvez considérer Linq aux simulations comme "de l'univers des simulations, donnez-moi une dont le comportement correspond à cette expression".
Découvrez le QuickStart pour plus d'exemples!
Le MOQ (prononcé "Mock-You" ou tout simplement "Mock") est la seule bibliothèque moqueuse pour .NET développée à partir de zéro pour profiter pleinement des arbres d'expression .NET Linq et des expressions de lambda, ce qui en fait le plus productif, de type type et de type Bibliothèque moqueuse adaptée à la refactorisation disponible. Et il prend en charge les interfaces moqueuses ainsi que les classes. Son API est extrêmement simple et simple, et ne nécessite aucune connaissance ou expérience préalable avec des concepts moqueurs.
La bibliothèque a été créée principalement pour les développeurs qui n'utilisent actuellement aucune bibliothèque moqueuse (ou sont mécontents des complexités d'une autre implémentation), et qui écrivent manuellement leurs propres simulations (avec plus ou moins de "fantaisie"). La plupart des développeurs de cette situation sont également assez pragmatiques et adhèrent au TDD (ou classique). C'est le résultat du sentiment que la barrière d'entrée des autres bibliothèques moqueuses est un peu élevée, et une approche plus simple, plus légère et élégante est possible. Le MOQ réalise tout cela en tirant pleinement parti des fonctionnalités élégantes et compactes du langage C # et VB connues collectivement sous le nom de LINQ (elles ne sont pas seulement pour les requêtes, comme l'acronyme l'indique).
Le MOQ est conçu pour être une manière très pratique, discrète et simple de configurer rapidement des dépendances pour vos tests. Sa conception d'API aide même les utilisateurs novices à tomber dans le "fosse du succès" et à éviter les abus / abus les plus courants de moqueurs.
Quand il a été conçu, c'était la seule bibliothèque moqueuse qui allait à l'encontre de l'approche / rediffusion généralisée et quelque peu intuitive (en particulier pour les novices) de toutes les autres bibliothèques (et cela aurait pu être une bonne chose;)).
Le fait de ne pas utiliser d'enregistrement / de relecture signifie également qu'il est simple de déplacer des attentes communes à une méthode de configuration du luminaire et même de remplacer ces attentes en cas de besoin dans un test unitaire spécifique.
Vous pouvez en savoir plus sur le "pourquoi" et voir de belles captures d'écran sur le blog de KZU.
Voir nos exemples QuickStart pour avoir une sensation de l'API extrêmement simple et installer à partir de NuGet.
Découvrez l'annonce sur le blog de KZU. Obtenez des antécédents sur l'état des bibliothèques simulées de Scott Hanselman.
Le MOQ a été initialement développé par Clarius, Manas et Ichedd.
Le MOQ utilise Castle DynamicProxy en interne comme mécanisme d'interception pour permettre la moquerie.
Le MOQ propose les fonctionnalités suivantes:
Strong-Typed: pas de chaînes pour les attentes, pas de valeurs ou de contraintes de retour de type objet
Intégration inébranlable vs Intellisense: tout prend en charge la pleine vs Intellisense, de la définition des attentes à la spécification des arguments d'appel de méthode, des valeurs de retour, etc.
Aucun enregistrement / replayation des idiomes à apprendre. Construisez simplement votre simulation, configurez-le, utilisez-le et vérifiez éventuellement les appels (vous ne pouvez pas vérifier les simulations lorsqu'ils agissent uniquement comme des talons, ou lorsque vous effectuez des tests plus classiques basés sur l'État en vérifiant les valeurs renvoyées de l'objet à test )
Courbe d'apprentissage très faible à la suite des trois points précédents. Pour la plupart, vous n'avez même pas besoin de lire la documentation.
Contrôle granulaire sur le comportement simulé avec une simple énumération de mock-bavior (pas besoin d'apprendre quelle est la différence théorique entre une simulation, un talon, un faux, une simulation dynamique, etc.)
Mock à la fois les interfaces et les classes
Remplacez les attentes: peut définir les attentes par défaut dans une configuration de luminaire et remplacer les tests nécessaires aux tests
Passer des arguments du constructeur pour les classes moquées
Intercepter et augmenter les événements sur les simulations
Support intuitif pour les arguments out/ref
Nous apprécions profondément les commentaires que vous pourriez avoir! N'hésitez pas à participer au chat ou à signaler un problème dans le tracker du numéro.
En savoir plus sur les sponsors GitHub