Подигравателно хвърляне на изключение с помощта на Mockito

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

В този бърз урок - ще се съсредоточим върху това как да конфигурираме извикване на метод, за да хвърлим изключение с Mockito.

За повече информация относно библиотеката разгледайте и нашата серия Mockito.

Ето един прост речников клас, който ще използваме в тези примери:

class MyDictionary { private Map wordMap = new HashMap(); public void add(String word, String meaning) { wordMap.put(word, meaning); } public String getMeaning(String word) { return wordMap.get(word); } }

2. Не- Void Вид Връщане

Първо, ако методът ни за връщане не е void, можем да използваме когато (). ThenThrow () :

@Test(expected = NullPointerException.class) public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); when(dictMock.getMeaning(anyString())) .thenThrow(NullPointerException.class); dictMock.getMeaning("word"); } 

Забележете, конфигурирахме метода getMeaning () - който връща стойност от тип String - да изхвърля NullPointerException при извикване.

3. Тип Void Return

Сега, ако методът ни върне void, ще използваме doThrow () :

@Test(expected = IllegalStateException.class) public void whenConfigVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); doThrow(IllegalStateException.class) .when(dictMock) .add(anyString(), anyString()); dictMock.add("word", "meaning"); }

Тук конфигурирахме метод add () - който връща void - да изхвърля IllegalStateException при извикване.

Не можем да използваме когато (). ThenThrow () с тип void return, тъй като компилаторът не позволява void методи в скоби.

4. Изключение като обект

Относно конфигурирането на самото изключение можем да предадем класа на изключението, както в предишните ни примери или като обект:

@Test(expected = NullPointerException.class) public void whenConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); when(dictMock.getMeaning(anyString())) .thenThrow(new NullPointerException("Error occurred")); dictMock.getMeaning("word"); }

И ние можем да направим същото и с doThrow () :

@Test(expected = IllegalStateException.class) public void whenConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); doThrow(new IllegalStateException("Error occurred")) .when(dictMock) .add(anyString(), anyString()); dictMock.add("word", "meaning"); }

5. Шпионин

Също така можем да конфигурираме Spy да изхвърля изключение по същия начин, както направихме с макета:

@Test(expected = NullPointerException.class) public void givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dict = new MyDictionary(); MyDictionary spy = Mockito.spy(dict); when(spy.getMeaning(anyString())) .thenThrow(NullPointerException.class); spy.getMeaning("word"); }

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

В тази статия разгледахме как да конфигурираме извикванията на методите, за да хвърлим изключение в Mockito.

Както винаги, пълният изходен код може да бъде намерен в GitHub.