Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
17 Май 2024
2 мин
211

Мокирование финальных классов с помощью Mockito

Тестирование — важная часть разработки программного обеспечения. Однако, иногда возникают ситуации, когда прямое тестирование определенных частей

Тестирование — важная часть разработки программного обеспечения. Однако, иногда возникают ситуации, когда прямое тестирование определенных частей кода становится затруднительным. Например, если вы хотите протестировать взаимодействие между двумя классами, но один из них является финальным классом. В таких случаях вы можете использовать технику, известную как «мокирование» (mocking), которая позволяет имитировать поведение реального объекта.

Рассмотрим пример. У вас есть финальный класс FinalClass и другой класс OtherClass, который использует FinalClass.

public final class FinalClass{
    public void doSomething(){
        // some code here
    }
}

public class OtherClass{
    FinalClass finalClass = new FinalClass();

    public void doSomethingElse(){
        finalClass.doSomething();
    }
}

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

Настройка Mockito для работы с финальными классами

По умолчанию, Mockito не поддерживает мокирование финальных классов. Однако, начиная с версии 2.x, Mockito предоставляет возможность мокировать финальные классы и методы. Для этого вам нужно включить эту функцию.

Для активации мокирования финальных классов необходимо создать файл org.mockito.plugins.MockMaker в директории /mockito-extensions/ в вашем тестовом классе. В этом файле должна быть одна строка: mock-maker-inline.

Мокирование финального класса

Теперь, когда Mockito настроен на работу с финальными классами, вы можете создать мок финального класса прямо в вашем тесте:

FinalClass finalClassMock = Mockito.mock(FinalClass.class);

Затем вы можете использовать этот мок вместо реального экземпляра FinalClass:

OtherClass otherClass = new OtherClass();
otherClass.setFinalClass(finalClassMock);

Теперь, когда doSomethingElse() будет вызван, doSomething() в FinalClass не будет выполняться, и вы сможете сосредоточиться на тестировании OtherClass.

В заключение, мокирование — это мощный инструмент для изоляции тестируемых частей кода и контроля над внешними зависимостями. Mockito предоставляет удобные средства для мокирования, включая поддержку мокирования финальных классов.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий