По сути, 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, в зависимости от того, какой из двух классов запускается первым в наборе тестов. Это может быть воспроизведено в нескольких тестовых классах, единственное условие состоит в том, что вы не должны настраивать тестовые классы по-другому. Любая настройка, которая приводит к тому, что тестовый класс будет отличаться от другого (в глазах весны), к весне приведет к созданию другого контекста приложения.