기본적으로 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는 빈 C를 모의하는 반면 클래스 B는 빈 D를 모의합니다. 따라서 스프링은 이것을 두 개의 다른 구성으로 간주하므로 클래스 A에 대해 한 번, 클래스 B에 대해 한 번 애플리케이션 컨텍스트를로드합니다.
대신 스프링이이 두 클래스간에 애플리케이션 컨텍스트를 공유하도록하려면 다음과 같이 보여야합니다.
@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에 대해 애플리케이션 컨텍스트를 한 번만로드합니다. 이것은 여러 테스트 클래스에 걸쳐 복제 될 수 있지만 기준은 테스트 클래스를 다르게 사용자 정의해서는 안된다는 것입니다. 테스트 클래스가 다른 것과 다른 결과를 초래하는 모든 사용자 정의 (스프링의 관점에서)는 결국 스프링까지 다른 애플리케이션 컨텍스트를 생성하게됩니다.