如何使用thenAnswer返回void的方法

xyz*_*xyz 1 unit-testing mockito

我想单元测试以下方法

public void addRecord(Record record)  
{  
   Myclass newObj = new Mycalss();  
   // It creates newObj object, set some values using record object.  
   // and it adds the newObj in daatbase.
   dataReqDao.persist(newObj);
}    
Run Code Online (Sandbox Code Playgroud)

我有模拟dataReqDao.persist方法但是如何验证是否将正确的值复制到newObj对象中?我想获得newObj对象.

我认为thenAnswer将是检测newObj即方法参数的合适方法,但不知道如何使用它返回void的方法.

更新:
我试过了

doAnswer(new Answer<Myclass>() {
              public Myclass answer(InvocationOnMock invocation) {
                  Object[] args = invocation.getArguments();
                  return (Myclass)args[0];
              }

        }).when(dataReqDao.persist(any(Myclass.class)));
Run Code Online (Sandbox Code Playgroud)

编辑:
应该是(谢谢大卫)

 doAnswer(new Answer<Myclass>() {
                  public Myclass answer(InvocationOnMock invocation) {
                      Object[] args = invocation.getArguments();
                      return (Myclass)args[0];
                  }

            }).when(dataReqDao).persist(any(Myclass.class));
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 5

您可以创建一个自定义参数匹配器来检查该对象的字段,或使用参数捕获器捕获该对象以供进一步检查.

例如,如下:

ArgumentCaptor<Myclass> c = ArgumentCaptor.forClass(Myclass.class);
verify(dateReqDao).persist(c.capture());
Myclass newObj = c.getValue();

... // Validate newObj
Run Code Online (Sandbox Code Playgroud)