Dans les frameworks moqueurs, vous pouvez vous moquer d' un objet ou l' espionner . Quelle est la différence entre les deux et quand devrais-je / devrais-je utiliser l'un par rapport à l'autre?
En regardant Mockito , par exemple, je vois des choses similaires se faire en utilisant des espions et des moqueurs , mais je ne suis pas sûr de la distinction entre les deux.
unit-testing
mocking
tdd
Vivin Paliath
la source
la source
Réponses:
L'objet fictif remplace entièrement la classe simulée, renvoyant les valeurs enregistrées ou par défaut. Vous pouvez créer des simulations à partir de "l'air mince". C'est ce qui est le plus souvent utilisé lors des tests unitaires.
Lors de l'espionnage, vous prenez un objet existant et ne "remplacez" que certaines méthodes. Ceci est utile lorsque vous avez une classe énorme et que vous ne voulez vous moquer que de certaines méthodes (moquage partiel). Permettez-moi de citer la documentation Mockito :
En cas de doute, utilisez des simulacres.
la source
Mockito avertit que la moquerie partielle n'est pas une bonne pratique et que vous devez réviser votre architecture orientée objet. Il est recommandé d' espionner (ou de se moquer partiellement) pour tester le code hérité .
la source
Je vais essayer d'expliquer en utilisant un exemple ici:
Ici, nous avions l'objet réel initial
list
, dans lequel nous avons ajouté un élément et la taille attendue en être un.Nous espionnons un objet réel, ce qui signifie que nous pouvons indiquer quelle méthode doit être stubbée . Nous avons donc déclaré que nous avons stubbed la méthode -
size()
sur un objet espion qui retournera 10, quelle que soit la taille réelle.En un mot, vous espionnerez un objet réel et en supprimerez certaines des méthodes .
la source
Référence: http://javapointers.com/tutorial/difference-between-spy-and-mock-in-mockito/
Lors de l'utilisation d'objets fictifs, le comportement par défaut de la méthode lorsqu'elle n'est pas stub est de ne rien faire. Simple signifie que si c'est une méthode void, alors il ne fera rien lorsque vous appelez la méthode ou si c'est une méthode avec un retour, il peut retourner null, vide ou la valeur par défaut.
Dans les objets espions, bien sûr, puisqu'il s'agit d'une méthode réelle, lorsque vous ne stubbing pas la méthode, elle appellera le comportement réel de la méthode. Si vous souhaitez modifier et vous moquer de la méthode, vous devez la stuber.
la source
Les mocks ne sont pas des talons par Martin Fowler
la source
Les espions ont deux définitions. L'un, est l'endroit où la méthode réelle est appelée, un autre où, aucune fonctionnalité n'est appelée et seules les valeurs équivalentes nulles ou nulles sont renvoyées, mais les méthodes ont été appelées et leur état a été enregistré, généralement comme la méthode x a été appelée y fois.
la source
Dans Mockito, si vous affectez un objet à la variable d'instance de Mock Object, cela n'affecte pas l'objet Mock.
Mais dans le cas de Spy, si vous affectez un objet à la variable d'instance de Spy Object, cela affecte alors Spy Object car Spy agit comme une modification d'objet en temps réel.
Pour un exemple de référence sont
la source