1

我正在使用 iBatis 2.2 并想模拟这个对 queryForObject 的调用

this.queryForObject("stored_proc_name", paramMap);

paramMap 在方法内部构建并保存输入参数,并且还将在 proc 调用后保存errorCodeerrorMessage(向 proc 输出参数)。我想在调用该行时将这两个值设置到 paramMap 中。
我在我的 dao 对象上使用“间谍”并在调用上述行时拦截。我尝试执行以下操作,但它不起作用,因为我实际上并没有在 java 代码中捕获结果对象,而是依赖于修改后的 paramMap..

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

有人知道在调用 queryForObject 调用时是否可以修改该 paramMap?

4

1 回答 1

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

于 2012-06-22T07:22:47.687 回答