![](/img/trans.png)
[英]Using Mockito.when() to mock and verify vs mockito.verify
[英]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.