Spring boot Tests: как активировать контекст только 1 раз? - PullRequest
0 голосов

Я хочу использовать только 1 контекст для всех тестов. Затем я наследую все тестовые классы из AbstractTest:

@SpringBootTest
public abstract class AbstractTest {
}

. Я ожидаю, что этот контекст будет активен только время, но это актуально для каждого пакета. У меня 5 пакетов, и контекст увеличился 5 раз.

введите описание изображения здесь

Как активировать контекст только 1 раз и сохранить структуру пакетов?

UPD: тестовый пример:

@Test
void create() throws Exception {
    Car car = entityGenerator.createCar(profile.getId());
    String content = asJson(car);
    log.info(content);
    result = mockMvc.perform(
            post("/v1/car/add")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(content)
    )
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.id").isNumber())
            .andExpect(jsonPath("$.profileId").value(car.getProfileId()))
            .andReturn();

    assertEquals(MediaType.APPLICATION_JSON_VALUE, result.getResponse().getContentType());
}

1 Ответ

1 голос
/ 14 июля 2020

Spring Test использует механизм кэширования контекста для повторного использования уже запущенных контекстов, если конфигурация контекста совпадает. Таким образом, по умолчанию вы должны иметь один абстрактный класс или просто аннотировать свои тесты с помощью @SpringBootTest. Пакет, в котором находится тестовый или производственный код, не имеет значения.

Однако есть сценарии ios, в которых Spring Test создаст новый контекст, если вы измените что-то для конфигурации контекста, например, используйте @MockBean или установите активный профиль.

Взгляните на официальную документацию , и вы можете найти список параметров конфигурации, которые Spring Test использует для определения контекста. Если один из этих параметров изменяется во время ваших тестов, вы получите новый контекст.

Также убедитесь, что ваши тесты выполняются в том же контексте и вы не используете forkMode плагина Maven Surefire .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...