我正在學習Mockito,我正在做的一件事是鞏固我的學習,就是將舊的JUnit測試從使用手動模擬類轉換爲使用Mockito模擬類的測試。但是,我遇到了我不知道如何處理的情況。是否可以查詢傳遞給Mockito模擬對象的參數?
具體來說,我的被測單元會構造一個String
,它將作爲方法調用的參數傳遞給模擬對象。我想測試String
構造正確。挑戰在於String
的一部分是一個散列鍵,它在內部生成並在每次調用時發生變化。一種可行的解決方案是在我的控制下獲得哈希生成,併爲測試執行注入虛擬生成器。但是,這是一個相當的工作。
我的舊手卷模擬類將存儲傳遞給它的參數,我可以在我的測試中查詢。這讓我通過以下查詢String
的起點和終點:
assertTrue(mockFtpClient.getFilePathAndName().startsWith("/data/inbound/XJSLGG."));
assertTrue(mockFtpClient.getFilePathAndName().endsWith(".pdf"));
這是的一個充分足夠的測試對我的口味。所以我的問題是,是否有可能使用Mockito來查詢或獲取傳遞給方法的參數,以便我可以執行類似於上面的操作?
UPDATE 24/06/2011: 在這一點上,我已經例外了Gnon的答案。但是,我發現了一些對我更好的東西。即ArgumentCaptor
。下面是它如何工作的:
ArgumentCaptor<String> fileNameArgument = ArgumentCaptor.forClass(String.class);
verify(mockFtpClient).putFileOnServer(fileNameArgument.capture());
assertTrue(fileNameArgument.getValue().startsWith(START_FILE_NAME) &&
fileNameArgument.getValue().endsWith(END_FILE_NAME));
爲國家的Mockito的Javadoc是ArgumentCaptor
通常是一個更好的選擇,當你有一個一次性的特定參數的匹配要求,因爲我在這裏做的。
感謝您的更新,我不知道ArgumentCaptor。 –
ArgumentCaptor將改變我的(編碼)生活! –