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

Финальные классы и методы Mockito

1. обзор

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

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

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

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

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

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 проверяет каталогextensions на наличие файлов конфигурации при загрузке. Этот файл включает макетирование финальных методов и классов.

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

Once Mockito is properly configured, a final method can be mocked like any other:

@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.

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