Тесты Пообщаться с GPT Протестировать код
Программирование Аналитика Дизайн Маркетинг Управление проектами
02 Ноя 2023
2 мин
866

Мокирование void методов с помощью Mockito

Пройдите тест, узнайте какой профессии подходите

Один из самых распространенных вопросов, возникающих при работе с Mockito, — как замокировать методы с возвращаемым типом void. Это может быть требуемо

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

Допустим, есть класс World, который содержит метод addListener, добавляющий слушателей, и метод doAction, который выполняет некоторое действие и обновляет состояние системы.

public class World {

    List<Listener> listeners;

    void addListener(Listener item) {
        listeners.add(item);
    }

    void doAction(Action goal,Object obj) {
        setState("i received");
        goal.doAction(obj);
        setState("i finished");
    }

    private String state;
    //setter getter state
} 

И есть тестовый класс WorldTest, который пытается замокировать World и добавить себя в качестве слушателя.

public class WorldTest implements Listener {

    @Test public void word{
    World  w= mock(World.class);
    w.addListener(this);
    ...
    ...
    }
}

Здесь возникает проблема: система не реагирует на добавление мока.

В Mockito есть инструменты для решения этой проблемы. Вместо того чтобы вызывать метод addListener напрямую, можно использовать конструкцию doNothing().when().

doNothing().when(mockedObject).voidMethod();

В данном случае, это будет выглядеть так:

doNothing().when(w).addListener(this);

После этого, можно вызвать addListener без проблем. Вызов doNothing().when() гарантирует, что ничего не будет сделано при вызове метода. Это идеально подходит для методов с void возвратом, так как они, по определению, ничего не возвращают.

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

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

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