Maison  >  Article  >  Java  >  Voici quelques options de titre, en se concentrant sur l'aspect de la question et le problème/solution principal : Option 1 (directe) : * Comment se moquer d'objets initialisés avec `new()` à l'aide de Mockito Spies ? Option 2 (Problème

Voici quelques options de titre, en se concentrant sur l'aspect de la question et le problème/solution principal : Option 1 (directe) : * Comment se moquer d'objets initialisés avec `new()` à l'aide de Mockito Spies ? Option 2 (Problème

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 11:11:30387parcourir

Here are a few title options, focusing on the question aspect and the core problem/solution:

Option 1 (Direct): 
* How to Mock Objects Initialized with `new()` Using Mockito Spies? 

Option 2 (Problem-Focused):
* Mockito Mocking Challenge: Testing Classe

Test des classes avec les appels de l'opérateur new() à l'aide de Mockito

Les classes moqueuses qui initialisent les instances à l'aide de l'opérateur new() peuvent être difficiles, en particulier lorsqu'il s'agit de code existant. Un tel exemple est la méthode login() dans la classe TestedClass, qui instancie un objet LoginContext.

Le défi se pose lorsque l'on essaie de tester cette classe à l'aide de Mockito car elle nécessite la configuration de la sécurité JAAS avant l'instanciation. Sans appeler LoginContext en externe, il semble impossible de se moquer de l'objet.

Solution : Utiliser les espions Mockito

Pour surmonter cet obstacle, Mockito fournit des espions, une fonctionnalité unique qui permet vous de créer des espions sur des objets réels. Les espions invoquent les méthodes réelles de l'objet espionné, mais vous pouvez toujours simuler ou affirmer des méthodes spécifiques si nécessaire.

Dans le cas de TestedClass, la solution est la suivante :

<code class="java">TestedClass tc = spy(new TestedClass());
LoginContext lcMock = mock(LoginContext.class);

when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>

Ici, nous créons un espion sur la TestedClass, nous permettant effectivement d'interagir avec les méthodes réelles et d'affirmer le comportement que nous attendons. En nous moquant de la méthode login(), nous pouvons contrôler la valeur de retour et vérifier les paramètres qui lui sont transmis.

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