Финальный класс и Финальный метод - Насмешка с Мокито 2 - PullRequest
0 голосов
/ 08 апреля 2020

Является ли функция, предоставляемая Mockito 2, для имитации финальных методов и финальных классов с использованием org.mockito.plugins.MockMaker (mock-maker-inline), обычно доступная (выпущенная) или все еще находящаяся в фазе инкубации. Я использую артефакт mockito-core-2.23.4 в своем приложении. Нужны предложения по издевательству над итоговыми занятиями и методами. Целесообразно ли использовать этот подход или искать альтернативные варианты?

1 Ответ

0 голосов
/ 08 апреля 2020

Начиная с Mockito 2.x, Mockito теперь поддерживает насмешку над финальными классами и методами.

Пример:

Скажем, у нас есть класс MyList, показанный ниже как соавтор в тестовых случаях.

Мы добавим новый finalMethod в этот класс:

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

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

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

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

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

mock -maker-inline

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

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

Как только 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(), и убедиться, что макет вызывается.

Макет финального класса:

Насмешка над финальным классом так же проста, как и над любым другим классом:

@Test
public void whenMockFinalClassMockWorks() {

    FinalList finalList = new FinalList();

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

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

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

Ссылка: https://www.baeldung.com/mockito-final

...