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

+1 362новые вакансии за сутки·93 657вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 122
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 114
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 864
  • iOS1 697
  • Fullstack вакансии986
  • AI вакансии949
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 537
  • Node.js2 020
  • .NET1 721
  • Kotlin1 614
  • Rust1 455
  • C#710
  • PHP681
  • C++571

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

  • Kubernetes7 769
  • DevOps вакансии6 052
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 240
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 266
  • Вакансии в Европе23 871
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 000
  • Релокация в США44 263
  • Гибридная работа12 377
  • Офисная работа7 078

По уровню

  • Senior вакансии42 642
  • Middle вакансии20 877
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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.

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

  • Путать термин «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

Вакансии с этим навыком

  • Full Stack Developer (Java / Angular)
  • FullStack Developer - Java & Angular
  • Java Developer (with German)
  • Senior Full Stack разработчик
  • Programista Backend / Software Engineer

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

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