基本的に、異なるテストクラス間で同じアプリケーションコンテキスト構成を使用している場合、Springはこれを構成するのに十分賢いです。たとえば、次のように2つのクラス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はこれらを2つの異なる構成と見なし、アプリケーションコンテキストをクラスAに対して1回、クラスBに対して1回ロードします。
代わりに、これら2つのクラス間でアプリケーションコンテキストを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のいずれかに対してアプリケーションコンテキストを1回だけロードします。これは、複数のテストクラス間で複製できます。唯一の基準は、テストクラスを異なる方法でカスタマイズしないことです。テストクラスが他のクラスとは異なる結果になるカスタマイズ(春の目で)は、春までに別のアプリケーションコンテキストを作成することになります。