CompletableFuture de la convivialité et de l'unité de test
Je suis en train d'apprendre à propos de java 8 CompletableFuture
et fini avec cette.
Poing de tous, que pensez-vous de ces lignes de code? J'ai besoin d'envoyer une requête à différents services en parallèle, et puis attendre pour eux tous de la réponse et continuer à travailler.
//service A
CompletableFuture<ServiceAResponse> serviceAFuture = CompletableFuture.supplyAsync(
() -> this.ServiceA.retrieve(serviceARequest), serviceAExecutorService
);
//service B
CompletableFuture<ServiceBResponse> serviceBFuture = CompletableFuture.supplyAsync(
() -> this.ServiceB.retrieve(serviceBRequest), serviceBExecutorService
);
CompletableFuture.allOf(serviceAFuture, serviceBFuture).join();
ServiceAResponse responseA = serviceAFuture.join();
ServiceBResponse responseB = serviceBFuture.join();
Et même le code est en train de faire ce que je veux, je vais avoir des problèmes pour tester la classe où ce code est. J'ai essayé d'utiliser Mockito et faire quelque chose comme:
doAnswer(invocation -> CompletableFuture.completedFuture(this.serviceAResponse))
.when(this.serviceAExecutorService)
.execute(any());
Où les services d'un exécuteur testamentaire et de services, les réponses sont moqueurs, mais le test ne s'arrête jamais et que le thread s'attend toujours à quelque chose dans cette ligne
CompletableFuture.allOf(serviceAFuture, serviceBFuture).join();
Le moindre indice sur ce que je suis en manque ici? Merci!!!!
OriginalL'auteur Leo | 2017-01-25
Vous devez vous connecter pour publier un commentaire.
Si j'étais vous, je voudrais simplement se moquer de les services A et B et de vos exécuteurs, puis de les injecter grâce à l'annotation
@InjectMocks
comme ils sont des champs de votre classe.Si vous voulez vous moquer de la méthode
execute
de votreExecutor
, vous devriez plutôt procéder comme suivant à il suffit d'appeler la méthoderun
de la conditionRunnable
:Donc, fondamentalement, votre test serait quelque chose comme ceci:
Réponse de mise à jour, veuillez vérifier à nouveau
OUI! merci!!!! c'est ce que j'ai à faire, j'ai toujours envie de se moquer de l'ExecutionService.la méthode execute ()? C'est exactement ce que je cherchais à faire, mais dans un sens, il fonctionne.
OriginalL'auteur Nicolas Filotto
OriginalL'auteur Roshan Oswal