Por que Mockito acho que o meu serviço está sendo chamado duas vezes?

Kaigo:

Estou tendo problemas usando Mockito para verificar o número de chamadas para um método zombou.

Este é o meu teste

@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 é o meu método de configuração

@Before
public void setup() {
    ...
    when(squareClient.getPaymentsApi()).thenReturn(paymentsApi);
    ...
}

Erro

Queria um tempo: em com.squareup.square.SquareClient.getPaymentsApi (SquareClient.java:239) Mas foi 2 vezes:

Aquela parece bem, mas quando você vê as duas chamadas vêm. . um está no serviço ,

Payment payment = squareClient.getPaymentsApi().getPayment(paymentId).getPayment();

E um no teste . Por que é este aqui?

when(squareClient.getPaymentsApi().getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);

meus problemas

  • Em primeiro lugar, deve haver apenas uma chamada.

  • Em segundo lugar, quando eu buscar por 2 vezes verify(squareClient, times(2)).getPayment("p1")eu recebo um ponteiro nulo porque getPaymentsApi () agora é nulo. É isto porque o mock quando () não está aplicando a segunda vez?

Tom Cools:

Aplique o seu quando () declaração em seu @Test diretamente no objeto PaymentsApi.

when(paymentsApi.getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);

Você não pode encadear as chamadas de método quando se usa "quando ()".

Acho que você gosta

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