«1. Обзор

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

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

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

mock-maker-inline

3. Макет финального метода

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

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

@Test
public void whenMockFinalMethodMockWorks() {

    MyList myList = new MyList();

    MyList mock = mock(MyList.class);
    when(mock.finalMethod()).thenReturn(1);

    assertNotEquals(mock.finalMethod(), myList.finalMethod());
}

4. Мокировать окончательный класс

Мокировать окончательный класс так же просто, как имитировать любой другой класс: класс, смоделируйте метод и убедитесь, что смоделированный экземпляр ведет себя по-другому.

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

@Test
public void whenMockFinalClassMockWorks() {

    FinalList finalList = new FinalList();

    FinalList mock = mock(FinalList.class);
    when(mock.size()).thenReturn(2);

    assertNotEquals(mock.size(), finalList.size());
}

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

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

«

The full examples, as always, can be found over on GitHub.