簡體   English   中英

為什么 mockito 認為我的服務被調用了兩次?

[英]Why does mockito think my service is being called twice?

我在使用 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() 現在為空。 這是因為模擬 when() 沒有第二次應用嗎?

直接在 PaymentsApi 對象上應用 @Test 中的 when() 語句。

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

使用“when()”時不能鏈接方法調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM