Maison >Java >javaDidacticiel >Comment pouvez-vous vous moquer d'une classe avec un appel « new() » à l'aide de Mockito ?

Comment pouvez-vous vous moquer d'une classe avec un appel « new() » à l'aide de Mockito ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 00:23:29777parcourir

How Can You Mock a Class with a `new()` Call Using Mockito?

Se moquer d'une classe avec un appel New() à l'aide de Mockito

Les classes héritées instancient souvent des objets en interne, ce qui rend difficile leur test à l'aide de la moquerie des frameworks comme Mockito. Cela devient évident lors de la configuration de dépendances complexes, telles que des contextes de sécurité qui nécessitent une configuration externe.

Considérez l'exemple de classe :

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

Nous voulons tester cette classe, mais la fonction login() La méthode instancie un objet LoginContext, compliquant la simulation sans refactoriser le code.

Mockito peut-il se moquer du LoginContext ?

Oui, il est possible de se moquer de la classe LoginContext à l'aide de Mockito en tirant parti de la puissante fonctionnalité des espions. Contrairement aux stubs, les espions appellent les méthodes réelles de l'objet espionné (sauf si une méthode a été stubbée).

Utiliser des espions pour se moquer du LoginContext

Pour se moquer du LoginContext sans modifier le code source, nous pouvons utiliser l'approche suivante :

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

Conclusion

En employant stratégiquement des espions, nous pouvons nous moquer efficacement des classes qui instancient des objets en interne , même si le code d'origine reste intact. Cette technique nous permet de tester efficacement ces classes et de garantir que leur comportement répond aux attentes.

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