tutorial page libreria home example español java unit-testing junit mockito

java - page - ¿Cómo usar ArgumentCaptor para stubbing?



mockito tutorial español (2)

En la documentation javadocs y javadocs , dice

Se recomienda usar ArgumentCaptor con verificación, pero no con stubbing.

pero no entiendo cómo ArgumentCaptor puede usarse para el troquelado. ¿Alguien puede explicar la declaración anterior y mostrar cómo ArgumentCaptor se puede usar para anotar o proporcionar un enlace que muestre cómo se puede hacer?


No dice que se puede usar para cortar, dice con un trozo.

Entonces puede usar argumentcaptor con un stubbing como este:

ArgumentCaptor<SomeOtherObject> argumentCaptor = argumentCaptor.forClass(SomeOtherObject.class); stub(someObject.doSomething(someParameter)).toReturn(someOtherObject); someObject.doSomething(someParameter); verify(someObject).doSomething(argumentCaptor.capture());

Aunque probablemente no sea una buena idea ... Tal vez sea porque podría causar problemas si se llama a DoSomething () con un parámetro diferente que algún parámetro.


Suponiendo el siguiente método para probar:

public boolean doSomething(SomeClass arg);

La documentación de Mockito dice que no debe usar captor de esta manera:

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

Debido a que solo puede usar el mezclador durante el muestreo:

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

Pero la verificación es una historia diferente. Si su prueba necesita asegurarse de que este método se invocó con un argumento específico, use ArgumentCaptor y este es el caso para el que está diseñado:

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