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));