스프링 TestContext 프레임워크의 내부구성은 모든 일반적인 사용 사례에 충분합니다. 그러나 개발 팀 또는 타사 프레임워크가 기본 ContextLoader를 변경하고, 사용자 지정 TestContext 또는 ContextCache를 구현하고, 컨텍스트 사용자 지정izerFactory 및 TestExecutionListener의 기본 집합을 보강하려는 경우가 있습니다. 구현 등등. TestContext 프레임워크의 작동 방식에 대한 이러한 낮은 수준의 제어를 위해 Spring은 부트스트래핑 전략을 제공합니다. 추상 트랜잭션JUnit4SpringContextTest는 요약JUnit4SpringContextTest의 추상 트랜잭션 확장으로 JDBC 액세스에 대한 몇 가지 편의 기능을 추가합니다. 이 클래스는 javax.sql.DataSource 빈 및 PlatformTransactionManager bean이 ApplicationContext에서 정의될 것으로 예상합니다. AbstractTransactionalJUnit4SpringContextTests를 확장하면 SQL 문을 실행하여 데이터베이스를 쿼리하는 데 사용할 수 있는 보호된 jdbcTemplate 인스턴스 변수에 액세스할 수 있습니다. 이러한 쿼리를 사용하여 데이터베이스 관련 응용 프로그램 코드를 실행하기 전과 후에 데이터베이스 상태를 확인할 수 있으며 Spring은 이러한 쿼리가 응용 프로그램 코드와 동일한 트랜잭션의 범위에서 실행되도록 합니다. ORM 도구와 함께 사용할 경우 거짓 긍정을 피해야 합니다. JDBC 테스트 지원에서 언급했듯이, 추상거래JUnit4SpringContextTest는 앞서 언급한 jdbcTemplate를 사용하여 JdbcTestUtils의 메서드에 위임하는 편리한 방법을 제공합니다.

또한, 추상트랜잭션JUnit4SpringContextTests는 구성된 데이터 소스에 대해 SQL 스크립트를 실행하기 위한 executeSqlScript(.) 메서드를 제공합니다. 다음 예제에서는 @Sql Java 8에서 반복 가능한 추가 로 사용하는 방법을 보여 주며, @ContextHierarchy 컨텍스트 계층 구조의 일부로 컨텍스트가 구성된 테스트에서 @DirtiesContext 사용하는 경우 hierarchyMode 플래그를 사용하여 컨텍스트 를 제어하는 방법을 제어할 수 있습니다. 캐시가 지워집니다. 기본적으로 전체 알고리즘은 현재 수준뿐만 아니라 현재 테스트에 공통적인 상위 컨텍스트를 공유하는 다른 모든 컨텍스트 계층구조를 포함하여 컨텍스트 캐시를 지우는 데 사용됩니다. 공통 상위 컨텍스트의 하위 계층 구조에 있는 모든 ApplicationContext 인스턴스는 컨텍스트 캐시에서 제거되고 닫힙니다. 특정 사용 사례에 대해 철저한 알고리즘이 과도하게 유지되는 경우 다음 예제와 같이 더 간단한 현재 수준 알고리즘을 지정할 수 있습니다. @ActiveProfiles(“개발자”)를 사용하여 TransferServiceTest에 추가하면 스프링 TestContext 프레임워크에 {“dev”}로 설정된 활성 프로필이 있는 응용 프로그램 컨텍스트를 로드하도록 지시합니다. 결과적으로 임베디드 데이터베이스가 만들어지고 테스트 데이터로 채워지고 계정 Repository bean은 개발 DataSource에 대한 참조로 배선됩니다. 통합 테스트에서 원하는 것일 수 있습니다. @TestPropertySource 빈 어노미로 선언되는 경우(즉, 위치 또는 속성 특성에 대한 명시적 값이 없는 경우) 해당 어노미를 선언한 클래스를 기준으로 기본 속성 파일을 검색하려고 시도합니다. 예를 들어, 추가된 테스트 클래스가 com.example.MyTest인 경우 해당 기본 속성 파일은 classpath:com/example/MyTest.properties입니다.

기본값을 검색할 수 없는 경우 IllegalStateException이 throw됩니다. 그런 다음 본문에 기본 제공 어설션을 사용할 수 있습니다. 다음 예제에서는 @RunWith(SpringRunner.class)을 사용하여 스프링 부팅 테스트 피쳐와 JUnit 사이의 브리지를 제공하는 방법을 보여 주었습니다. JUnit 테스트에서 스프링 부팅 테스트 기능을 사용할 때마다 이 추가 사항이 필요합니다. 지금까지의 예제에서는 스프링 TestContext 프레임워크에서 로드된 WebApplicationContext를 기반으로 웹 클라이언트를 빌드하여 가능한 가장 간단한 방법으로 MockMvcWebClientBuilder를 사용했습니다. 이 방법은 다음 예제에서 반복됩니다: 스프링 및 JUnit 목성의 주석을 결합하는 사용자 정의 구성 주석. 자세한 내용은 테스트를 위한 메타 어노미션 지원의 @TransactionalDevTestConfig 및 @TransactionalIntegrationTest 예제를 참조하십시오.