Может ли Mockito захватить аргумент переменной, объявленной в реализации? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть реализация класса:

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

Как я могу получить значение "obj", когда printW выполняет метод "append"?

1 Ответ

0 голосов
/ 14 февраля 2019

Итак, у вас есть две опции:

  1. Макет PrintWriter и захват obj.toString() при вызове append.Однако это даст вам только String представление Object, а не фактический объект, например:

    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 и смоделируйте конструктор длякласс вашей локальной переменной, например:

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

    Вам нужно будет аннотировать класс junit с помощью @PrepareForTest(Object.class).

...