Подигравателни методи на празнота с Mockito

1. Общ преглед

В този кратък урок ние се фокусираме върху подигравателните методи на void с Mockito.

Както и при други членове фокусирани върху рамка Mockito (като Mockito Потвърждаване, Mockito Когато / Тогава и Mockito на Моделните методи), в MyList класа показано по-долу ще се използва като сътрудника в тестовете.

Ще добавим нов метод за този урок:

public class MyList extends AbstractList { @Override public void add(int index, String element) { // no-op } }

2. Просто подигравка и проверка

Отпада методи могат да бъдат използвани с Mockito на doNothing () , doThrow () , и doAnswer () методи, което прави подигравателен и проверка интуитивен:

@Test public void whenAddCalledVerified() { MyList myList = mock(MyList.class); doNothing().when(myList).add(isA(Integer.class), isA(String.class)); myList.add(0, ""); verify(myList, times(1)).add(0, ""); }

Въпреки това, doNothing () е стандартно поведение Mockito за невалидни методи.

Тази версия на whenAddCalledVerified () изпълнява същото нещо като тази по-горе:

@Test public void whenAddCalledVerified() { MyList myList = mock(MyList.class); myList(0, ""); verify(myList, times(1)).add(0, ""); } 

DoThrow () генерира изключение:

@Test(expected = Exception.class) public void givenNull_AddThrows() { MyList myList = mock(MyList.class); doThrow().when(myList).add(isA(Integer.class), isNull()); myList.add(0, null); } 

Ще разгледаме doAnswer () по-долу.

3. Аргумент улавяне

Една от причините да замените поведението по подразбиране с doNothing () е да улови аргументи.

В горния пример използвахме метода verify () , за да проверим аргументите, предадени на add () .

Може обаче да се наложи да уловим аргументите и да направим нещо повече с тях.

В тези случаи използваме doNothing () точно както направихме по-горе, но с ArgumentCaptor :

@Test public void whenAddCalledValueCaptured() { MyList myList = mock(MyList.class); ArgumentCaptor valueCapture = ArgumentCaptor.forClass(String.class); doNothing().when(myList).add(any(Integer.class), valueCapture.capture()); myList.add(0, "captured"); assertEquals("captured", valueCapture.getValue()); } 

4. Отговаряне на Call to Void

Методът може да изпълнява по-сложно поведение от простото добавяне или задаване на стойност.

За тези ситуации, можем да използваме Mockito на отговор , за да добавите поведението ни трябва:

@Test public void whenAddCalledAnswered() { MyList myList = mock(MyList.class); doAnswer(invocation -> { Object arg0 = invocation.getArgument(0); Object arg1 = invocation.getArgument(1); assertEquals(3, arg0); assertEquals("answer me", arg1); return null; }).when(myList).add(any(Integer.class), any(String.class)); myList.add(3, "answer me"); } 

Както е обяснено в Java 8 Характеристики Mockito си, ние използваме ламбда с отговор да се определи по поръчка поведение за добавка () .

5. Частично подигравка

Частичните подигравки също са опция. DoCallRealMethod () на Mockito може да се използва за void методи:

@Test public void whenAddCalledRealMethodCalled() { MyList myList = mock(MyList.class); doCallRealMethod().when(myList).add(any(Integer.class), any(String.class)); myList.add(1, "real"); verify(myList, times(1)).add(1, "real"); } 

По този начин можем да извикаме действителния метод и да го проверим едновременно.

6. Заключение

В тази кратка статия разгледахме четири различни начина за подход към методите на void при тестване с Mockito.

Както винаги, примерите са налични в този проект на GitHub.