Mockito 可以捕获在实现中声明的变量的参数吗?

Can Mockito capture an argument of a variable declarated in implementation?

我有 class 实现:

public class testImpl{
  public void method(Object a){
    Object obj = new Object();
    PrintWritter printW = a.getWriter();
    printW.append(obj.toString());
  }
}

如何在printW执行方法"append"时捕获"obj"的值?

所以,你有两个选择:

  1. 模拟PrintWriter并在调用append时捕获obj.toString()。但是,这只会为您提供 ObjectString 表示,而不是实际对象,例如:

    PrintWriter mockWriter = Mockito.mock(PrintWriter.class);
    Object mockA = Mockito.mock(Object.class);
    Mockito.when(mockA.getWriter()).thenReturn(mockWriter);
    ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
    verify(mockWriter).append(argument.capture());
    String result = argument.getValue();
    
  2. 使用 PowerMockito 并为局部变量的 class 模拟构造函数,例如:

    Object mockObject = Mockito.mock(Object.class);
    PowerMockito.whenNew(Object.class).withNoArguments().thenReturn(mockObject);
    

    您必须用 @PrepareForTest(Object.class) 注释 junit class。