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