Maison >Java >javaDidacticiel >Comment tester des classes avec des appels `new()` intégrés à l'aide de Mockito Spies ?

Comment tester des classes avec des appels `new()` intégrés à l'aide de Mockito Spies ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 12:48:29914parcourir

How to Test Classes with Embedded `new()` Calls Using Mockito Spies?

Test des classes avec des appels new() intégrés à l'aide de Mockito

Considérez une classe héritée (TestedClass) qui instancie un objet LoginContext à l'aide d'un appel direct new() :

<code class="java">public class TestedClass {
  public LoginContext login(String user, String password) {
    LoginContext lc = new LoginContext("login", callbackHandler);
  }
}</code>

Tester cette classe peut être difficile lorsque le LoginContext L'instanciation nécessite des configurations de sécurité JAAS spécifiques. Pour résoudre ce problème, nous explorons l'utilisation de Mockito pour se moquer de la classe LoginContext sans modifier le code source d'origine.

Utilisation des espions Mockito

Mockito fournit un mécanisme pratique appelé espions qui nous permet de créer des espions d'objets réels, qui exécutent les méthodes suivantes :

  • Les méthodes réelles sont appelées par défaut (sauf si elles sont individuellement stubbées).
  • Les espions peuvent être utilisés avec prudence pour les scénarios de code hérité.

Pour tester notre classe avec les espions, nous pouvons introduire le code suivant :

<code class="java">TestedClass tc = spy(new TestedClass());
LoginContext lcMock = mock(LoginContext.class);
when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>

Ce code crée un espion de l'instance TestedClass (tc ) et se moque de la classe LoginContext via lcMock. L'instruction when() supprime la méthode login() pour renvoyer le LoginContext simulé.

L'emploi d'espions nous permet de tester la classe d'origine sans altérer son mécanisme d'appel new(), offrant une approche de test flexible et efficace.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn