Cet exemple montre comment utiliser la fonctionnalité spy
de Mockito pour se moquer d'une méthode spécifique au sein d'une classe. Disons que nous avons une classe appelée MyClass
:
public class MyClass { public int add(int a, int b) { return a + b + internalMethod(); } private int internalMethod() { return 5; // This is the method we want to isolate } public int anotherMethod() { return 10; } }
Nous voulons tester la méthode add
, mais nous ne voulons pas que le résultat soit affecté par le internalMethod
. Nous pouvons utiliser un espion pour se moquer du internalMethod
:
import org.junit.jupiter.api.Test; import org.mockito.Mockito; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; public class MyClassTest { @Test void testAddMethod() { MyClass myClassSpy = spy(MyClass.class); when(myClassSpy.internalMethod()).thenReturn(10); // Mock the internal method int result = myClassSpy.add(2, 3); assertEquals(15, result); // 2 + 3 + 10 = 15 } }
Dans cet exemple, nous créons un espion de MyClass
. Ensuite, en utilisant when(myClassSpy.internalMethod()).thenReturn(10);
, nous étouffons le internalMethod
pour retourner 10, isolant son comportement du test de la méthode add
. L'affirmation vérifie alors que la méthode add
se comporte correctement étant donné la moquette internalMethod
.
spy
de Mockito pour isoler et tester une méthode spécifique au sein d'une classe? Mockito's spy
vous permet de créer une trousse partielle d'un objet existant. Cela signifie que vous pouvez conserver la mise en œuvre réelle de la plupart des méthodes tout en moquant sélectivement des méthodes spécifiques. Pour l'utiliser, vous créez un espion en utilisant Mockito.spy(yourObject)
. Ensuite, vous utilisez la méthode when()
de Mockito pour spécifier le comportement des méthodes que vous souhaitez vous moquer. Par exemple:
MyClass myClass = new MyClass(); MyClass myClassSpy = spy(myClass); when(myClassSpy.internalMethod()).thenReturn(10); // Mock only internalMethod
Cela créera un objet d'espion myClassSpy
. Les appels à internalMethod
sur myClassSpy
renverront 10. Toutes les autres méthodes utiliseront leur implémentation réelle. Cela permet des tests ciblés du comportement d'une méthode spécifique isolément du reste de la classe. N'oubliez pas que vous devez utiliser when
pour définir le comportement de la méthode que vous souhaitez vous moquer; Sinon, il appellera la véritable implémentation.
Alors que les espions offrent l'avantage de tester les interactions avec des implémentations réelles, ils introduisent plusieurs pièges potentiels:
internalMethod
modifie l'état de l'objet, cette modification se produira toujours, même si vous vous êtes moqué de sa valeur de retour. Vous devriez généralement favoriser la moquerie d'espionnage à moins d'avoir une raison contraignante d'utiliser un espion. Choisissez un espion lorsque:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!