Grundsätzlich ist spring intelligent genug, um dies für Sie zu konfigurieren, wenn Sie dieselbe Anwendungskontextkonfiguration für die verschiedenen Testklassen haben. Angenommen, Sie haben zwei Klassen A und B wie folgt:
@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;
}
In diesem Beispiel verspottet Klasse A Bean C, während Klasse B Bean D verspottet. Spring betrachtet diese also als zwei verschiedene Konfigurationen und lädt daher den Anwendungskontext einmal für Klasse A und einmal für Klasse B.
Wenn wir stattdessen möchten, dass spring den Anwendungskontext zwischen diesen beiden Klassen teilt, müssten sie wie folgt aussehen:
@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;
}
Wenn Sie Ihre Klassen so verkabeln, lädt spring den Anwendungskontext nur einmal für Klasse A oder B, je nachdem, welche Klasse unter den beiden zuerst in der Testsuite ausgeführt wird. Dies kann über mehrere Testklassen hinweg repliziert werden. Das einzige Kriterium ist, dass Sie die Testklassen nicht anders anpassen sollten. Jede Anpassung, die dazu führt, dass sich die Testklasse (in den Augen des Frühlings) von der anderen unterscheidet, würde bis zum Frühjahr einen anderen Anwendungskontext schaffen.