À en juger par le diagramme, le produit est une classe de données stupide, sans fonctionnalité à tester. Je commencerais donc à écrire des tests pour (et à implémenter, le style TDD) d'abord Line puis Order, dans l'échelle de dépendance. Il est généralement judicieux de faire tester vos classes de niveau inférieur avant de commencer à travailler sur des classes de niveau supérieur (c'est-à-dire qui dépendent du niveau inférieur). Cela rend la capture de bogues plus efficace.
La nécessité d'utiliser des objets fantaisie dépend des dépendances réelles de la classe testée. S'il s'agit de classes simples que vous pouvez facilement instancier et configurer avec les données / états souhaités requis pour vos tests, vous n'avez besoin d'aucune simulation. (Cela semble être le cas pour votre exemple de conception ici.) Cependant, si l'une des dépendances est difficile à initialiser / a des dépendances étendues elle-même / a des effets secondaires indésirables / dépend d'une ressource externe telle qu'une base de données, alors cela a du sens pour utiliser un objet factice à la place.
Je ne vois pas beaucoup de besoin d'objets fictifs ici. Comme d'autres l'ont souligné, vous en avez besoin surtout si les dépendances sont difficiles à configurer.
Par exemple, nous les avons utilisés avec des projets Ruby on Rails lorsque nous avons testé des contrôleurs et avons eu besoin d'une connexion utilisateur qui aurait nécessité un appel à un autre contrôleur et le stockage d'une partie de ses informations dans un cookie. Dans ce cas, il est utile de se moquer d'un utilisateur connecté qui renvoie true, lorsqu'on lui demande un certain privilège d'accès.
la source
Normalement, pour les tests, vous voulez isoler le système / objet testé, vous vous moquerez donc de tout ce qui est en dehors de cela. Donc, en utilisant votre diagramme de classes, lorsque vous testez un objet de commande, utilisez une maquette pour l'objet de ligne. Lors du test de la ligne, utilisez une maquette pour la commande et le produit. Lors du test du produit, utilisez une maquette pour Line.
la source
"Le TDD est avant tout une technique de conception qui a pour effet secondaire de garantir que votre code source est soigneusement testé à l'unité" - Scott W. Ambler
L'idée est de trouver le design en écrivant des tests unitaires. Dans votre cas, il semble que vous ayez déjà le design en place, ce qui va un peu à l'encontre de l'objectif de TDD (en supposant que votre design est final).
Concernant la moquerie. Si vous voulez vous moquer, je vous suggère de vous moquer du produit lors de l'écriture des tests pour la ligne et de la ligne simulée lors du test de la commande. Mais c'est peut-être exagéré ici. J'essaie personnellement de limiter autant que possible les moqueries et de les utiliser pour découpler les dépendances des classes externes (telles que les instances de base de données).
la source