2012-06-21 32 views
1

我使用iBatis的2.2和想嘲笑這個電話轉給queryForObject的Mockito:刺探iBatis的queryForObject和修改參數圖

this.queryForObject("stored_proc_name", paramMap); 

的paramMap是建立一個方法內並保持輸入參數,也將舉行errorCodeerrorMessage在proc調用之後(輸出參數到proc)。我想在線被調用時將這兩個值設置爲paramMap。
我在我的dao對象上使用「間諜」,並在上面的行被調用時攔截。我試着做以下,但它不工作,因爲我不是正式拍攝結果對象的Java代碼,但依靠修改paramMap ..

doReturn(paramMap).when(daoSpy).queryForObject(eq("stored_proc_name"), anyMap()); 

有誰知道,如果有可能的時候修改paramMap queryForObject調用被調用?

回答

0

當然。您應該使用一個Answer對象,並在傳入的地圖中添加所需的值。它可能看起來像這樣。

doAnswer(new Answer<Map<String,Object>>(){ 
    @Override 
    public Map<String,Object> answer(InvocationOnMock invocation){ 
     Map<String,Object> params = (Map<String,Object>) invocation.getArguments()[0]; 
     params.put("errorCode", 55); 
     params.put("errorMessage", "Your message here"); 
     return params; 
    }}).when(daoSpy).queryForObject(
     eq("stored_proc_name"), anyMapOf(String.class, Object.class)); 

欲瞭解更多信息,http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#answer_stubs