簡體   English   中英

使用 Mockito 時驗證空行失敗

[英]When using Mockito verify failing on empty row

嘗試使用以下測試來測試我的客戶端:

private static final HttpPost EXPECTED_POST = new HttpPost(someURI);

    @Test
    public void sendingPostRequest() throws IOException {
        classUnderTest.takeParamsAndSend(REQUEST_STRING);
        verify(client).execute(EXPECTED_POST);
        verifyNoMoreInteractions(client);
    }

在生產代碼中,它是這樣的:

URI uri = createURI();
HttpPost post = new HttpPost(uri);
return client.execute(post);

結果是在同一個執行和實際中出現“比較失敗”,有一個空行。 看起來像這樣:預期:

"client.execute(
    POST somePostRequest HTTP/1.1
);"

實際的:

"client.execute(
   POST somePostRequest HTTP/1.1
);
"

編輯:如評論中所述,大多數 Apache HTTP 客戶端 API 類不會覆蓋java.lang.Object#equals ,因此您不能可靠地使用org.mockito.ArgumentMatchers#eq(T) 您將需要使用org.mockito.ArgumentMatchers#argThat匹配器,在謂詞中定義您的相等條件。

這是我測試它的方法:

import static org.mockito.ArgumentMatchers.argThat;

//...
@Test
  void stackOverflow64222693() {

    // Given
    HttpClient client = mock(HttpClient.class);
    URI        uri    = URI.create("https://stackoverflow.com/questions/64222693");
    HttpPost   post   = new HttpPost(uri);

    // When
    client.execute(post);

    // Then
    URI      expectedUri  = URI.create("https://stackoverflow.com/questions/64222693");
    HttpPost expectedPost = new HttpPost(expectedUri);

    verify(client).execute(argThat(argument -> argument.getURI().equals(expectedPost.getURI()) &&
                                               argument.getMethod().equals(expectedPost.getMethod()) &&
                                               Arrays.equals(argument.getAllHeaders(), expectedPost.getAllHeaders()) &&
                                               argument.getProtocolVersion().equals(expectedPost.getProtocolVersion())));
  }

暫無
暫無

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

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