В основному spring досить розумний, щоб налаштувати це для вас, якщо у вас однакова конфігурація контексту програми для різних класів тесту. Наприклад, скажімо, у вас є два класи A і B, як показано нижче:
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class A {
@MockBean
private C c;
}
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class B {
@MockBean
private D d;
}
У цьому прикладі клас A висміює bean C, тоді як клас B висміює bean D. Отже, Spring розглядає їх як дві різні конфігурації і, отже, завантажує контекст програми один раз для класу A і один раз для класу B.
Якщо замість цього ми хотіли б, щоб spring поділився контекстом програми між цими двома класами, вони мали б виглядати приблизно так:
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class A {
@MockBean
private C c;
@MockBean
private D d;
}
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class B {
@MockBean
private C c;
@MockBean
private D d;
}
Якщо ви підключите свої класи таким чином, spring завантажуватиме контекст програми лише один раз для класу A або B, залежно від того, який з двох класів запускається першим у наборі тестів. Це може бути відтворено в декількох тестових класах, лише критерієм є те, що ви не повинні налаштовувати тестові класи по-різному. Будь-яка настройка, в результаті якої тестовий клас відрізнятиметься від інших (на очах весни), в кінцевому підсумку створить інший контекст програми до весни.