Dans le monde d'aujourd'hui, Mock (programmation orientée objet) est devenu un sujet d'une grande pertinence et d'un grand intérêt pour un large éventail de publics. Depuis son émergence, Mock (programmation orientée objet) a eu un impact sur la vie des gens de diverses manières, ainsi que sur le développement de la société dans son ensemble. Dans cet article, nous explorerons les différentes facettes de Mock (programmation orientée objet) et son influence sur le monde d'aujourd'hui. De son origine à son évolution, en passant par ses implications dans différents domaines, Mock (programmation orientée objet) a réussi à capter l'attention de millions de personnes à travers le monde. De plus, nous examinerons les perspectives futures de Mock (programmation orientée objet) et comment celles-ci pourraient façonner la réalité à laquelle nous serons confrontés dans les années à venir.
En programmation orientée objet, les mocks (simulacres ou mock object) sont des objets simulés qui reproduisent le comportement d'objets réels de manière contrôlée. Un programmeur crée un mock dans le but de tester le comportement d'autres objets, réels, mais liés à un objet inaccessible ou non implémenté. Ce dernier est alors remplacé par un mock.
Le concept a été utilisé pour la première fois lors de la conférence XP 2000, dans un article de Tim Mackinnon, Steve Freeman et Philip Craig intitulé Endo-Testing: Unit Testing with Mock Objects[1],[2]. Le terme lui-même est emprunté au roman Alice au pays des merveilles de Lewis Carroll plus particulièrement de la Fausse Tortue (ou Tortue Fantaisie, en anglais The Mock Turtle) dans la version originale[2].
Une traduction de l'expression mock object par celle d'objet fantaisie, est proposée par certains[3]. Une définition de l'adjectif mock étant not real but appearing or pretending to be exactly like something[4], on pourra lui préférer celle d'objet factice (mais on perdrait alors la référence amusante).
Dans un test unitaire, les mocks peuvent simuler le comportement d'objets réels et complexes et sont utiles à ce titre quand ces objets réels sont impossibles à utiliser. On peut citer les cas suivants :
Par exemple, un programme d'alarme qui produira une sonnerie à une heure donnée. Pour le tester, le programme devra attendre l'heure prévue afin de vérifier que la sonnerie se produit. Si un mock est utilisé, celui-ci pourra être déréglé en vue de simuler l'heure de déclenchement de la sonnerie.
Un mock a la même interface que l'objet qu'il simule autorisant ainsi l'objet client à ignorer s'il interagit avec un objet réel ou un objet simulé. La plupart des frameworks d'utilisation de mock permettent au programmeur de spécifier quelles méthodes vont être appelées et dans quel ordre elles le seront. De même pour les paramètres qui vont leur être passés. Les valeurs retournées par le mock seront aussi définies par le programmeur. Ainsi, le comportement d'un objet complexe tel qu'un socket de réseau pourra être simulé par le mock, permettant ainsi au programmeur d'étudier le comportement de son objet dans une large variété d'états auxquels il pourra être confronté.
Certains auteurs font une distinction entre les mocks et les objets factices (fake). Les objets factices sont les plus simples des deux, ils implémentent la même interface que l'objet qu'ils représentent et renvoient des réponses prédéfinies. Ainsi, un objet fake fournit un ensemble de méthodes bouchon.
Dans le livre The Art of Unit Testing [5], les mocks sont décrits comme des objets factices permettant de décider si un test a été passé, en vérifiant si l'interaction avec un objet s'est produite ou non. Tous les autres objets sont des bouchons. Les objets factices correspondent à tout ce qui n'est pas réel. En utilisant cette terminologie, ils sont à la fois les bouchons et les mocks.
Dans cette acception, les mocks en font un peu plus : l'implémentation de leurs méthodes contiennent des affirmations. Ceci veut dire qu'un véritable mock examinera le contexte des appels de méthode qui seront faits, par exemple en effectuant des tests sur les données passées en tant qu'argument des appels.