Встречается на собеседованиях • сегодня
Почему не получается писать Unit тесты для микросервисов на текущем проекте
Основные причины:
-
Сложные зависимости – микросервисы часто взаимодействуют с другими сервисами, БД, брокерами сообщений. Без моков (Mockito, WireMock) или тестовых контейнеров (Testcontainers) тесты становятся интеграционными.
-
Отсутствие изолированности – бизнес-логика тесно связана с инфраструктурой (HTTP-клиенты, JPA). Нужно разделять слои (например, DDD + Hexagonal Architecture).
-
Конфигурация окружения – тесты могут падать из-за различий в настройках (разные URL, credentials). Решение:
@TestPropertySourceили профили Spring.
- Отсутствие TDD/культуры тестирования – код пишется без учета тестируемости (private методы, синглтоны).
Пример:
java
// Плохо – напрямую вызывается другой сервис
public class OrderService {
private final RestTemplate restTemplate;
public Order process(Order order) {
Payment payment = restTemplate.postForObject(...); // Зависит от внешнего API
if (payment.isSuccess()) { ... }
}
}
// Лучше – выделить интерфейс и мокать
public interface PaymentClient {
Payment process(PaymentRequest request);
}
@Test
void processOrder_WhenPaymentSuccess_ThenSavesOrder() {
PaymentClient mockClient = mock(PaymentClient.class);
when(mockClient.process(any())).thenReturn(new Payment(Status.SUCCESS));
OrderService service = new OrderService(mockClient);
Order result = service.process(new Order());
assertThat(result.isPaid()).isTrue();
} Решение: внедрять моки, использовать Testcontainers для БД, применять принцип Dependency Injection.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы