Перейти к основному содержимому

Макет финальных классов и методов с Mockito

· 2 мин. чтения

1. Обзор

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

Как и в других статьях, посвященных среде Mockito (например, Mockito Verify , Mockito When/Then и Mockito 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 для имитации финальных классов и методов, мы должны его настроить.

Нам нужно добавить текстовый файл в каталог проекта 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 .