Назад к вопросам
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");
}
}
Такой подход позволяет изолировать тестируемый код от внешних зависимостей и проверять логику без сетевых задержек и нестабильности внешних систем.