Имитация финальных классов и методов с помощью Mockito

1. Обзор

В этой короткой статье мы сосредоточимся на том, как имитировать финальные классы и методы - используя Mockito.

Как и в других статьях, посвященных структуре Mockito (например, Mockito Verify, Mockito When / Then и Mockito's Mock Methods), мы будем использовать класс MyList, показанный ниже, в качестве соавтора в тестовых примерах .

Мы добавим новый метод для этого урока:

public class MyList extends AbstractList { final public int finalMethod() { return 0; } }

И мы также расширим его последним подклассом:

public final class FinalList extends MyList { @Override public int size() { return 1; } } 

2. Настройте Mockito для финальных методов и классов.

Прежде чем Mockito можно будет использовать для имитации классов и методов final, его необходимо настроить.

Нам нужно добавить текстовый файл в каталог проекта src / test / resources / mockito-extensions с именем org.mockito.plugins.MockMaker и добавить одну строку текста:

mock-maker-inline 

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

3. Имитация окончательного метода

После того, как Mockito правильно настроен, последний метод можно смоделировать, как и любой другой :

@Test public void whenMockFinalMethodMockWorks() { MyList myList = new MyList(); MyList mock = mock(MyList.class); when(mock.finalMethod()).thenReturn(1); assertNotEquals(mock.finalMethod(), myList.finalMethod()); } 

Создав конкретный и фиктивный экземпляры MyList , мы можем сравнить значения, возвращаемые обеими версиями finalMethod (), и убедиться, что макет вызывается.

4. Имитация финального класса

Издевательство над последним классом так же просто, как издевательство над любым другим классом:

@Test public void whenMockFinalClassMockWorks() { FinalList finalList = new FinalList(); FinalList mock = mock(FinalList.class); when(mock.size()).thenReturn(2); assertNotEquals(mock.size(), finalList.size()); } 

Как и в предыдущем тесте, мы создаем конкретный экземпляр и фиктивный экземпляр нашего последнего класса, имитируем метод и проверяем, что фиктивный экземпляр ведет себя по-разному.

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

В этом кратком руководстве мы рассмотрели, как имитировать финальные классы и методы с помощью Mockito с помощью расширения Mockito.

Полные примеры, как всегда, можно найти на GitHub.