Почему mockito считает, что мой сервис вызывается дважды? - PullRequest
0 голосов
/ 30 марта 2020

У меня возникли проблемы с использованием mockito для проверки количества обращений к ложному методу.

Это мой тест

@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
}

Это мой метод установки

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

Ошибка

Требуется 1 раз: в com.squareup.square.SquareClient.getPaymentsApi (SquareClient. java: 239) Но было 2 раза:

Это нормально, но когда вы видите, как поступают два звонка. , один в сервисе ,

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

и один в тесте . Почему этот здесь?

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

Мои проблемы

  • Во-первых, должен быть только 1 звонок.

  • Во-вторых, когда я проверяю 2 раза verify(squareClient, times(2)).getPayment("p1"), я получаю нулевой указатель , потому что getPaymentsApi () теперь является нулевым. Это из-за того, что mock when () не применяется второй раз?

1 Ответ

3 голосов
/ 30 марта 2020

Примените свой оператор when () в своем @Test непосредственно к объекту PaymentsApi.

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

Вы не можете связывать вызовы методов при использовании "when ()".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...