Comment utiliser ArgumentCaptor pour le stubbing?

Dans la documentation Mockito et javadocs, il est dit

Il est recommandé d’utiliser ArgumentCaptor avec la vérification mais pas avec le remplacement.

mais je ne comprends pas comment ArgumentCaptor peut être utilisé pour le stubbing. Quelqu’un peut-il expliquer la déclaration ci-dessus et montrer comment ArgumentCaptor peut être utilisé pour créer des talons ou fournir un lien qui montre comment procéder?

En supposant la méthode suivante pour tester:

public boolean doSomething(SomeClass arg); 

La documentation Mockito dit que vous ne devriez pas utiliser Captor de cette manière:

 when(someObject.doSomething(argumentCaptor.capture())).thenReturn(true); assertThat(argumentCaptor.getValue(), equalTo(expected)); 

Parce que vous pouvez simplement utiliser matcher pendant le stubbing:

 when(someObject.doSomething(eq(expected))).thenReturn(true); 

Mais la vérification est une autre histoire. Si votre test doit vérifier que cette méthode a été appelée avec un argument spécifique, utilisez ArgumentCaptor et c’est le cas pour lequel elle a été conçue:

 ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SomeClass.class); verify(someObject).doSomething(argumentCaptor.capture()); assertThat(argumentCaptor.getValue(), equalTo(expected));