Maison  >  Article  >  Java  >  Comment se moquer des comportements de méthodes non déterministes dans Mockito ?

Comment se moquer des comportements de méthodes non déterministes dans Mockito ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 04:30:02988parcourir

How to Mock Nondeterministic Method Behaviors in Mockito?

Test des réponses non déterminées dans Mockito

Lors du test de code asynchrone impliquant des réponses non déterminées, telles que celles obtenues à partir d'un ExecutorCompletionService, il devient nécessaire de se moquer des comportements de méthodes non déterministes. Dans ce scénario, une méthode peut renvoyer différents objets lors d'appels ultérieurs avec les mêmes arguments.

Pour y parvenir dans Mockito, utilisez la méthode thenReturn avec plusieurs arguments. La syntaxe est la suivante :

when(method-call).thenReturn(value1, value2, value3);

Vous pouvez spécifier autant d'arguments que nécessaire, tous du même type. La première valeur sera renvoyée lors du premier appel de méthode, la seconde lors du second, et ainsi de suite. Une fois que toutes les valeurs ont été renvoyées, la dernière valeur continuera à être renvoyée pour les appels suivants.

Par exemple, le code suivant montre comment tester une méthode qui appelle un ExecutorCompletionService pour récupérer des tâches :

// Arrange
ExecutorCompletionService<T> completionService = mock(ExecutorCompletionService.class);
when(completionService.take()).thenReturn(task1, task2, task3);

// Act
for (int i = 0; i < 3; i++) {
    T task = completionService.take().get();

    // Assert
    assertEquals(expectedTasks[i], task);
}

Dans cet exemple, la méthode take renverra initialement la tâche1, puis la tâche2 et enfin la tâche3 pour les trois premiers appels. Ensuite, la même valeur (task3) sera renvoyée pour tous les appels suivants. Cela permet de tester des réponses non déterministes tout en vérifiant que le résultat reste constant.

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