почему метод шпиона не может быть заглушен? - PullRequest
0 голосов
/ 15 ноября 2018

Интересно, что шпион, введенный Мокито, может быть заглушен, чтобы восстановить значение.Но следующий код генерирует исключение IndexOutOfBoundsException.Итак, я думаю, что настоящая версия get () вызывается, а не тупая версия.Шпион может быть зарезан?

@Test
public void doReturnUsage() throws Exception {
    List<String> list = new ArrayList<String>();
    List<String> spy = spy(list);
    when(spy.get(0)).thenReturn("not reachable");
    assertEquals("now reachable", spy.get(0));
}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Рассмотрим другой пример:

List<String> list = new LinkedList<String>();
List<String> spy = spy(list);
when(spy.size()).thenReturn(100);
when(spy.get(0)).thenReturn("good");
System.out.println(spy.get(0));
System.out.println(spy.size());

Почему spy.size () может быть заглушен, а spy.get (0) - нет?

0 голосов
/ 18 ноября 2018

Когда вы используете @Spy, синтаксис немного отличается от использования обычного экземпляра Injected.

Mockito.doReturn("not reachable").when(spy).get(0);

Шпион, как полезный, когда вы хотите "издеваться" над публичным методом, который находится в классе, который вы тестируете. например

Class A {
  public void methodA() {
    // do something
  }
  public void methodB() {
    // do something 
    call methodA();
   // do something else 
  }
}

Здесь открытый метод "methodA" класса A вызывается из открытого метода "methodB". Таким образом, при написании тестового примера для «methodB», мы высмеиваем вызов «methodA», используя шпион. И мы самостоятельно тестируем «метод А»

...