Sobes.tech
Назад к вопросам
Middle
4

Как написать unit-тест на метод, который обращается к внешней системе, чтобы реального обращения не происходило?

Компании, где спрашивали
экзон

Ответ от нейросети

sobes.tech AI

Чтобы написать unit-тест на метод, который обращается к внешней системе, и при этом избежать реального обращения, используют мокирование (mocking). Это значит, что вместо реального вызова внешней системы создаётся имитация (mock), которая возвращает заранее заданные данные.

В Java для этого часто применяют библиотеки Mockito или EasyMock. Пример с Mockito:

import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;

class ExternalService {
    public String fetchData() {
        // Реальный вызов внешней системы
        return "real data";
    }
}

class MyService {
    private ExternalService externalService;

    public MyService(ExternalService externalService) {
        this.externalService = externalService;
    }

    public String process() {
        String data = externalService.fetchData();
        return "Processed " + data;
    }
}

public class MyServiceTest {
    @Test
    void testProcess() {
        ExternalService mockService = mock(ExternalService.class);
        when(mockService.fetchData()).thenReturn("mocked data");

        MyService myService = new MyService(mockService);
        String result = myService.process();

        assert result.equals("Processed mocked data");
    }
}

Такой подход позволяет изолировать тестируемый код от внешних зависимостей и проверять логику без сетевых задержек и нестабильности внешних систем.