Zasadniczo spring jest wystarczająco inteligentny, aby skonfigurować to za Ciebie, jeśli masz taką samą konfigurację kontekstu aplikacji w różnych klasach testowych. Na przykład, powiedzmy, że masz dwie klasy A i B w następujący sposó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;
}
W tym przykładzie klasa A naśladuje fasolę C, podczas gdy klasa B symuluje fasolę D.W związku z tym spring traktuje je jako dwie różne konfiguracje i w ten sposób ładuje kontekst aplikacji raz dla klasy A i raz dla klasy B.
Jeśli zamiast tego chcielibyśmy, aby wiosna współużytkowała kontekst aplikacji między tymi dwiema klasami, musiałyby wyglądać następująco:
@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;
}
Jeśli połączysz swoje klasy w ten sposób, spring załadowałby kontekst aplikacji tylko raz, albo dla klasy A, albo B, w zależności od tego, która z tych dwóch klas zostanie uruchomiona jako pierwsza w zestawie testów. Można to powielić w wielu klasach testowych, jedynym kryterium jest to, że nie należy dostosowywać klas testowych w inny sposób. Wszelkie dostosowania, które powodują, że klasa testowa różni się od innych (w oczach wiosny), kończyłyby się wiosną utworzeniem innego kontekstu aplikacji.