Objets fantaisie (Mock Objects)

Concept

De quoi s'agit-il?

Technique couramment utilisée dans la mise au point de tests unitaires automatisés.

Il s'agit de créer pour les besoins d'un test une version spécifique d'un composant logiciel (typiquement une classe, qui sera par conséquent instanciée par un objet), qui au lieu de reproduire le fonctionnement réel de ce composant en fournit une version "pré-enregistrée": par exemple, le "mock" d'une base de données est un objet qui simule la base de données, en renvoyant des données prédéterminées quelle que soit la requêtre qu'on lui transmet.

On l'appelle également...

On parle également de "simulacres".

Le terme "stub" (bouchon) n'est pas à proprement parler un synonyme, mais fait partie du même vocabulaire créé pour parler avec plus de précision de certaines techniques liées aux tests unitaires.

Le terme générique pour l'ensemble des objets de ce type est "doublure" (en anglais "test double" par analogie à "stunt double").

Origines

  • le terme est dû à Steve Freeman, Tim McKinnon et Philip Craig, c'est une allusion à un passage d'Alice au Pays des Merveilles de Lewis Carroll sur la Tortue Fantaisie (Mock Turtle), leur article "Endo-Testing: Unit Testing with Mock Objects" est publié en 2000

Quels bénéfices en attendre?

Le principal intérêt de cette technique est qu'elle permet de découpler des parties du code de façon à les tester de façon réellement "unitaire", c'est-à-dire sans que le résultat du test soit dépendant d'un composant qui n'a rien à voir avec celui que l'on teste, mais dont ce dernier dépend pour son fonctionnement.

Erreurs courantes

Cette technique un peu controversée a de nombreux adeptes mais également des détracteurs, qui estiment que l'utilisation de ces objets fantaisie ou "mocks" complique, souvent inutilement, le code des tests unitaires, au détriment de leur rôle de documentation technique.