43 votes

Qu'est-ce que Object Mocking et quand en ai-je besoin?

Beaucoup de gens utilisent des objets fantaisie lorsqu'ils écrivent des tests unitaires. Qu'est-ce qu'un objet factice ? Pourquoi aurais-je jamais besoin d'un? Ai-je besoin d'un cadre d'objet factice?

35voto

lomaxx Points 32540

Objet de Moqueries est utilisé pour garder les dépendances de votre unité de test. Parfois, vous aurez un test comme "SelectPerson" qui permet de sélectionner une personne à partir de la base de données et retourner un objet Personne.

Pour ce faire, vous avez normalement besoin d'une dépendance sur la base de données, cependant avec l'objet de moqueries, vous pouvez simuler l'interaction avec la base de données avec un faux cadre, de sorte qu'il peut retourner un jeu de données qui ressemble à un retourné à partir de la base de données et vous pouvez ensuite tester votre code pour s'assurer qu'elle traite de la traduction d'un jeu de données à une personne de l'objet, plutôt que de l'utiliser pour tester une connexion à la base de données existe.

17voto

Joshua McKinnon Points 12379

Plusieurs personnes ont déjà répondu à l' "quoi", mais ici, êtes un couple de rapides, les "pourquoi" que je peux penser:

  1. Performance

    Parce que les tests unitaires doivent être rapide, le test d'un composant interagit avec un réseau, une base de données, ou d'autres temps-intensif ressource n'a pas besoin de payer une amende si c'est fait à l'aide de maquette objets. Les économies s'additionner rapidement.

  2. La Collaboration

    Si vous êtes à la rédaction d'un bien encapsulé morceau de le code qui a besoin d'interagir avec quelqu'un d'autre code (qui n'a pas encore été écrit, ou est en cours d'élaboration en parallèle commune le scénario), vous pouvez exercer votre code avec des objets fantaisie une fois un l'interface a été convenu. Sinon, votre code ne peut pas commencer à être testé jusqu'à ce que l'autre élément est fini.

12voto

Mike Stone Points 21293

Un objet fantaisie vous permet de tester contre un peu de ce que vous écrivez, et des détails abstraits tels que l'accès à des ressources (disque, un service de réseau, etc). La maquette vous permet alors de faire semblant d'être que des ressources externes, ou de la classe ou de quoi que ce soit.

Vous n'avez pas vraiment besoin d'un objet fantaisie cadre, juste étendre la classe de la fonctionnalité que vous ne voulez pas à vous soucier de votre test et assurez-vous que la classe que vous testez pouvez utiliser votre maquette au lieu de la vraie chose (passer via un constructeur ou un setter ou quelque chose.

Pratique quand on se moque de sont utiles, et quand ils ne le sont pas.

EDIT: en se moquant de ressources est particulièrement important si vous n'avez pas à compter sur eux pour exister pendant le test, et vous pouvez se moquer les détails de la façon dont ils existent et ce qu'ils répondent (comme la simulation d'une FileNotFoundException, ou un webservice qui manque, ou de diverses valeurs de retour possibles d'un webservice)... le tout sans ralentir les temps d'accès concernés (moqueur va s'avérer BEAUCOUP plus rapide que l'accès à ces ressources dans le test).

9voto

Brad Tutterow Points 5628

Ai-je besoin d'un Objet Fantaisie Cadre?

Certainement pas. Parfois, l'écriture se moque de la main peut être assez fastidieux. Mais pour les choses simples, il n'est pas mauvais du tout. L'application du principe de Dernier Moment pour se moquant des cadres, vous devriez passer de la main-écrite se moque d'un cadre de référence lorsque vous avez prouvé à vous-même que la main se moque de l'écriture est plus d'ennuis que cela vaut la peine.

Si vous êtes juste en train de commencer à se moquer, sauter directement dans un cadre va au moins doubler votre courbe d'apprentissage (pouvez-vous le double d'une courbe?). Se moquant de cadres de faire beaucoup plus de sens quand vous avez passé quelques projets d'écriture se moque de la main.

5voto

Ed. Points 1012

Il vous permet de tester la manière dont une partie de votre projet interagit avec le reste, sans avoir à construire le tout et sans rater une partie vitale.

EDIT: Excellent exemple de wikipedia: Il vous permet de tester le code à l’avance, comme un concepteur de voitures utilise un mannequin pour tester les performances de ses véhicules.

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