¿Por qué piensan Mockito mi servicio está siendo llamado dos veces?

kaigo:

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?

Tom Cools:

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 ()".

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=378835&siteId=1
Recomendado
Clasificación