Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+687новых вакансий за сутки·55 254вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 791
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python7 042
  • Облачные технологии6 770
  • QA вакансии2 176
  • Android1 199
  • Инженер данных940
  • Продакт-менеджер435

Разработка

  • iOS1 135
  • Backend вакансии1 131
  • Fullstack вакансии475
  • AI вакансии458
  • Frontend вакансии404
  • Mobile вакансии27

По стеку

  • Go4 093
  • Java2 435
  • Kotlin990
  • Node.js827
  • Rust665
  • .NET525
  • PHP282
  • C++273
  • C#199

DevOps и инфраструктура

  • Kubernetes4 025
  • Linux-инфраструктура3 060
  • Terraform / IaC2 214
  • DevOps вакансии2 110
  • Мониторинг и Observability1 106
  • CI/CD919
  • SRE341
  • Кибербезопасность90

Аналитика и данные

  • Аналитик данных555
  • Data Scientist513
  • Бизнес-аналитик431
  • Системный аналитик65

Другие направления

  • Проджект-менеджер160
  • UI/UX дизайн77
  • Ручное тестирование14

По регионам

  • Вакансии в США29 375
  • Вакансии в Европе11 048
  • Работа в России3 627
  • Вакансии в Канаде2 514

По формату

  • Удалённые вакансии48 640
  • Релокация в США29 375
  • Гибридная работа5 790
  • Офисная работа4 553

По уровню

  • Senior вакансии25 029
  • Middle вакансии13 245
  • Junior вакансии4 377

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise125 вакансий
  • Celonis28 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen17 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Spring BootВсе вопросы
Spring BootMiddleТеория

Какова роль @SpringBootTest в интеграционном тестировании?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

@SpringBootTest поднимает полный Spring ApplicationContext для интеграционных тестов. Поддерживает режимы MOCK (MockMvc), RANDOM_PORT (реальный HTTP) и NONE (только контекст без веб-слоя).

Пример: тест с MockMvc

@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
class UserControllerIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private UserRepository userRepository;

    @BeforeEach
    void setUp() {
        userRepository.deleteAll();
        userRepository.save(new User("Alice", "alice@example.com"));
    }

    @Test
    void shouldReturnUserList() throws Exception {
        mockMvc.perform(get("/api/users")
                .contentType(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$[0].name").value("Alice"));
    }

    @Test
    void shouldCreateUser() throws Exception {
        String requestBody = """
            {"name": "Bob", "email": "bob@example.com"}
            """;

        mockMvc.perform(post("/api/users")
                .contentType(MediaType.APPLICATION_JSON)
                .content(requestBody))
            .andExpect(status().isCreated())
            .andExpect(jsonPath("$.name").value("Bob"));
    }
}

@SpringBootTest в интеграционном тестировании

@SpringBootTest — аннотация Spring Test, которая поднимает полный (или частичный) контекст Spring ApplicationContext для интеграционных тестов. В отличие от юнит-тестов с @ExtendWith(MockitoExtension.class), здесь участвуют реальная автоконфигурация, бины, база данных и HTTP-слой.

Режимы webEnvironment

  • MOCK (по умолчанию) — создаёт mock-среду веб-контейнера, используется с MockMvc.
  • RANDOM_PORT — запускает реальный встроенный сервер на случайном порту; используется с TestRestTemplate или WebTestClient.
  • DEFINED_PORT — реальный сервер на порту из application.properties.
  • NONE — без веб-среды, только ApplicationContext.

Пример: тест с реальным HTTP (RANDOM_PORT)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
class OrderApiIntegrationTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @LocalServerPort
    private int port;

    @Test
    void shouldReturnOrderById() {
        ResponseEntity<OrderDto> response = restTemplate
            .getForEntity("/api/orders/1", OrderDto.class);

        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
        assertThat(response.getBody()).isNotNull();
    }
}

Изоляция через @Transactional и @Sql

@SpringBootTest
@Transactional // откатывает каждый тест
@Sql("/sql/test-data.sql") // вставляет данные перед тестом
class ProductServiceIntegrationTest {

    @Autowired
    private ProductService productService;

    @Test
    void shouldFindProductByCategory() {
        List<Product> products = productService.findByCategory("electronics");
        assertThat(products).hasSize(3);
    }
}

Мокирование отдельных бинов

@SpringBootTest
class PaymentIntegrationTest {

    @MockBean // заменяет реальный бин в контексте Spring моком Mockito
    private PaymentGateway paymentGateway;

    @Autowired
    private OrderService orderService;

    @Test
    void shouldProcessPayment() {
        when(paymentGateway.charge(any())).thenReturn(PaymentResult.success("txn-123"));

        OrderResult result = orderService.placeOrder(new OrderRequest(...));

        assertThat(result.isPaid()).isTrue();
        verify(paymentGateway).charge(any());
    }
}

Кеширование контекста

Spring Test кеширует ApplicationContext между тестовыми классами с одинаковой конфигурацией. Использование @MockBean или @DirtiesContext создаёт новый контекст, что замедляет тесты. Группируйте тесты с одинаковым набором моков.

Подводные камни

  • @SpringBootTest поднимает весь контекст — тесты становятся медленными. Для тестирования одного слоя используйте слайсы: @WebMvcTest, @DataJpaTest, @JsonTest.
  • @MockBean инвалидирует кеш контекста — каждый класс с уникальным набором @MockBean создаёт новый контекст. Сведите число комбинаций к минимуму.
  • Использование RANDOM_PORT с @Transactional не откатывает транзакции — HTTP-запросы идут через реальный контейнер в другом потоке.
  • Без @ActiveProfiles("test") тест может подключиться к production-базе, если spring.profiles.active не задан явно.
  • Не чистить БД между тестами — состояние из одного теста ломает другой. Используйте @Transactional, @Sql или явный @BeforeEach.
  • @DirtiesContext на каждом тестовом классе сбрасывает кеш и многократно поднимает контекст — тестовый прогон превращается в многоминутный.
  • Забыть добавить spring-boot-starter-test в зависимости — тест не скомпилируется без JUnit 5 и Spring Test.

Частые вопросы на собеседовании

  • Как реализовать health checks в Spring Boot Actuator?
  • Что делает аннотация @SpringBootApplication?
  • Что такое Spring Boot и чем он отличается от Spring Framework?
  • В каких backend-проектах Spring Boot является сильным выбором, а где лучше выбрать более простой или другой стек?

Типичные ошибки

  • Путать термин «springboottest» с соседним механизмом Spring Boot.
  • Не называть границу lifecycle, transaction, thread или request для «springboottest».
  • Игнорировать production-эффекты «springboottest»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «springboottest» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «springboottest».
  • Уточнить, какие настройки или API меняют «springboottest» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Spring Boot →

Источники

  • https://docs.spring.io/spring-boot/reference/testing/spring-boot-applications.html
←Предыдущий вопросВ чём разница между `@RestController` и `@Controller`?Следующий вопрос→Как обрабатывать исключения глобально в REST API на Spring Boot?

Связанные темы

Spring Bootbackend-designtechnical-communication