Estoy teniendo problemas para usar Mockito para verificar el número de llamadas a un método burlado.
Esta es mi prueba
@Mock
private SquareClient squareClient;
@Mock
private PaymentsApi paymentsApi;
@Test
public void testBlah() throws Exception {
...
when(squareClient.getPaymentsApi().getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
sut.process(EXAMPLE_PAYLOAD);
verify(squareClient).getPaymentsApi().getPayment("p1"); //<--------------error here
}
Este es mi método de configuración
@Before
public void setup() {
...
when(squareClient.getPaymentsApi()).thenReturn(paymentsApi);
...
}
Error
Se busca 1 vez: en com.squareup.square.SquareClient.getPaymentsApi (SquareClient.java:239), pero fue 2 veces:
Eso de que parece muy bien, pero cuando ves las dos llamadas provienen. . uno está en el servicio ,
Payment payment = squareClient.getPaymentsApi().getPayment(paymentId).getPayment();
Y uno en la prueba . ¿Por qué es este de aquí?
when(squareClient.getPaymentsApi().getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
Mis problemas
En primer lugar, debe haber sólo 1 llamada.
En segundo lugar, cuando compruebo por 2 veces
verify(squareClient, times(2)).getPayment("p1")
consigo un puntero nulo porque getPaymentsApi () ahora es nula. ¿Esto es porque cuando la maqueta () no está aplicando la segunda vez?
Aplique su cuando () declaración en su @test directamente en el objeto PaymentsApi.
when(paymentsApi.getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
No se puede encadenar sus llamadas al método cuando se utiliza "cuando ()".