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
可以做到这一点,尽管我不能完全确定