Accéder au contenu principal

Create and use a result captor in Mockito


Today I will show you how to create a Mockito captor
In Mockito it exists the possibilty to use ArgumentCaptor to allow developers to verify the arguments used during the call of mocked method, but not the result itself.
Indeed, in the current release of Mockito it's not possible to capture it and my solution to do that is to build a ResultCaptor class which implements the Answer interface and generify it for more conveniance.

Let's take a look.

Create the ResultCaptor class

public static class ResultCaptor<T> implements Answer<T> {
private T result = null;

public T getResult() {
return result;
}

@Override
public T answer(InvocationOnMock invocationOnMock) throws Throwable {
//noinspection unchecked
result = (T) invocationOnMock.callRealMethod();
return result;
}
}

In this quite simple implementation we see that the ResultCaptor class implements the Answer interface which force to override the answer method. We use this "interceptor" to call the real method of spied bean and capture the result to store it in the current context.

Use the ResultCaptor class

ResultCaptor<ServiceResult> serviceResultCaptor = new ResultCaptor<>();
var message = new Message("id", "hello all!");
doAnswer(serviceResultCaptor).when(serviceSpy).sendMessage(message);
// do the call
var serviceResult = serviceResultCaptor.getResult();
assertThat(serviceResult).isNotNull();
assertThat(serviceResult.getWhatever()).isEqualTo("Whatever");
And that's it !
If you want a Spring boot example you can clone repository : 
https://github.com/ulrich/mockito-result-captor-demo
Crédit photo : https://pixabay.com/fr/users/jackmac34-483877/

Posts les plus consultés de ce blog

Retour sur Rework

Je me suis pour une fois sorti la tête des ouvrages techniques, de mon GoogleReader/programming/languages et autres joyeusetés de ce genre, pour me plonger dans le livre à la mode, Rework . Ce livre co-écrit par Jason Fried et David Heinemeier Hansson est un cookbook destiné aussi bien aux boss, qu'à leurs employés, désirant comprendre et décrypter les clés de la réussite de cette entreprise : 37signals , qui est au passage la boite qui a crée le website Basecamp et le framework ROR . L'ensemble repose sur un enchainement intéressant de chapitres courts mais percutants, avec des illustrations assez plaisantes. Tout est écrit en noir & blanc dans un anglais assez compréhensif, qui permet de le terminer en un clin d'œil, si vous n'avez pas fait comme moi et pris des notes quasiment à chaque chapitre. Je ne vais pas coucher toutes mes notes sur cette page, mais vous en énumérez les premiers points qui m'ont le plus marqué, car ce livre a été pour moi et sera je...

Releaser avec Maven sur github

Le but de l'exercice est de releaser un projet Maven simple en utilisant le maven-release-plugin via Cygwin sur la plateforme github . En effet, la procédure serait aussi simple que sur Subversion , à la condition d'avoir ses settings et ses POM au carré, ce que nous allons voir de suite. Pour mener à bien l'opération, les pré-requis sont les suivants : Avoir un environnement de développement sous Cygwin , le mien étant Windows XP SP3 / Cygwin 2.712 , / java 1.6.0_17 / git 1.7.1 avec une auto-complétion des commandes git bien pratique, Avoir une configuration Maven opérationnelle dans le sens où vous avez accès aux maximums de repositories publics et une plateforme d'hébergement/déploiement pour vos archives. La mienne étant Maven 2.2.1 / Nexus™ Open Source Edition 1.7.1. J'avoue avoir de la chance, car j'utilise pour mes tests, ma plateforme d'entreprise (chez Vidal) configurée aux petits oignons par mon collègue Thierry que je salue au pass...

Mémotech Rubik's Cube

Voici un article rapide plus destiné à un être un mémo, qu'un tutorial complet sur la résolution du Cube en 3x3x3. Je tire les informations d'un site web aujourd'hui disparu (www.rubik.gireaud.org), qui proposait des solutions pour les cubes 2x2x2, 3x3x3, 4x4x4, 5x5x5, 7x7x7. La première couronne Quand vous aurez fini la première couronne, votre cube ressemblera à ça: Le croix Le but de cette étape est de réaliser une croix qui ressemblera à ça: Comme le montre la figure ci-dessus,  il faut que la croix soit alignée avec les cubes centraux . Comme les cubes centraux ne bougent jamais (ils seront toujours au centre), c'est à vous de placer les arêtes correctement. Exemple d'une couronne mal positionnée: Ne vous souciez pas des coins ! Concentrez-vous sur les  arêtes uniquement  !! Comme c'est l'étape la plus facile, je n'ai pas détaillé toutes les possibilités de mouvements. Arrangez-vous pour placer les arêtes que vous voulez placer sur la croix sur la f...