Встречается на собеседованиях • сегодня

Почему не получается писать Unit тесты для микросервисов на текущем проекте

Основные причины:

  1. Сложные зависимости – микросервисы часто взаимодействуют с другими сервисами, БД, брокерами сообщений. Без моков (Mockito, WireMock) или тестовых контейнеров (Testcontainers) тесты становятся интеграционными.

  2. Отсутствие изолированности – бизнес-логика тесно связана с инфраструктурой (HTTP-клиенты, JPA). Нужно разделять слои (например, DDD + Hexagonal Architecture).

  3. Конфигурация окружения – тесты могут падать из-за различий в настройках (разные URL, credentials). Решение: @TestPropertySource или профили Spring.

  1. Отсутствие 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.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы