Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito能否捕获实现中声明的变量的参数?_Java_Unit Testing_Mockito_Verify - Fatal编程技术网

Java Mockito能否捕获实现中声明的变量的参数?

Java Mockito能否捕获实现中声明的变量的参数?,java,unit-testing,mockito,verify,Java,Unit Testing,Mockito,Verify,我有类实现: public class testImpl{ public void method(Object a){ Object obj = new Object(); PrintWritter printW = a.getWriter(); printW.append(obj.toString()); } } 当printW执行“append”方法时,如何捕获“obj”的值 因此,您有两种选择: 调用append时,模拟PrintWriter并捕获obj.

我有类实现:

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

当printW执行“append”方法时,如何捕获“obj”的值

因此,您有两种选择:

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

    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();
    
    您必须使用
    @PrepareForTest(Object.class)
    注释junit类


  • 因此,您有两种选择:

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

    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();
    
    您必须使用
    @PrepareForTest(Object.class)
    注释junit类


  • 您无法捕获obj,因为它没有在方法外部传播。您只能在对象a上使用ArgumentCaptor获得
    obj.ToString()
    的结果。也许
    PowerMockito
    可以做到这一点,但我不能完全确定您不能捕获obj,因为它没有在方法之外传播。您将只能在对象a上使用ArgumentCaptor获得
    obj.ToString()
    的结果。也许
    PowerMockito
    可以做到这一点,尽管我不能完全确定