1

私はiBatis2.2を使用していて、queryForObjectへのこの呼び出しをモックしたいと思っていました

this.queryForObject("stored_proc_name", paramMap);

paramMapはメソッド内に構築され、入力パラメーターを保持し、proc呼び出し(procへの出力パラメーター)の後にerrorCodeerrorMessageも保持します。行が呼び出されたときに、これら2つの値を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 に答える