programing

SpringBootTest의 @DataJpaTest에서 구성 클래스를 가져오려면 어떻게 해야 합니까?

css3 2023. 7. 9. 12:34

SpringBootTest의 @DataJpaTest에서 구성 클래스를 가져오려면 어떻게 해야 합니까?

SpringBoot 애플리케이션과 구성 패키지가 있습니다.

@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}

그러나 PersistenceConfig사용자 저장소에서 선택되지 않음테스트

@RunWith( SpringRunner.class )
@DataJpaTest
public class PersonRepositoryTest {

    // Tests ...
}

하지만, 만약 내가 변한다면,@DataJpaTest to @SpringBootTest사용자 저장소테스트에서 구성을 선택합니다.

의 패키지 구조는

- main
    - java
        - config
              PersistenceConfig.java
        - domain
              Person.java
        - persistence
              PersonRepository.java
          Application.java // @SpringBootApplication

- test
    - java
        - persistence
              PersonRepositoryTest.java

Spring Boot 1.4의 테스트 개선 사항은 @DataJpaTest로 지속성 계층을 테스트하는 것을 제안합니다.

관찰:테스트 클래스에서 두 주석을 모두 수행해도 구성 @SpringBoot을 가져오지 않습니다.테스트 @DataJpa테스트

질문 1: @DataJpaTest로 지속성 계층을 테스트할 때 구성 패키지를 테스트로 올바르게 가져오는 방법(SpringBoot의 모범 사례)은 무엇입니까?

질문 2: @SpringBootTest를 사용하여 해결할 수 있습니까?@DataJpaTest는 트랜잭션 관리를 포함하여 데이터베이스에 적합한 자동 구성을 갖춘 메타 주석이기도 합니다.하지만 만약 내가 그것이 필요하지 않다면요?

해결책은 다음과 같습니다.@Import사용자 구성을 사용자가 수행한 구성으로 가져오려면@DataJpaTest이것이 제가 이해하는 바입니다.@Import.

@RunWith(SpringRunner.class)
@DataJpaTest
@Import(AuditConfiguration.class)
public class AuditTest {
}

와 함께AuditConfiguration감사를 가능하게 하는

@Configuration
@EnableJpaAuditing
public class AuditConfiguration {
}

사용해 볼 수 있습니다. 주석 달기PersistenceConfig와 함께@ComponentScanSpring에서 구성 요소 스캔을 활성화합니다.

@Configuration
@EnableJpaAuditing
@ComponentScan(basePackages = "com.yourbasepackage")
public class PersistenceConfig {
}

더 이상의 구성이 없으면,@ComponentScan기본적으로 동일한 패키지를 검색합니다.PersistenceConfig학급.

그리고 추가합니다.@Context-Configuration주석을 사용하여 PersistenceConfig.class에서 구성을 로드하도록 지시합니다.

@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=PersistenceConfig.class)
public class PersonRepositoryTest {

    // Tests ...
}

@georges van post 이후 테스트에서 한 줄만 추가하면 모든 구성 클래스가 선택된다는 것을 알게 되었습니다.

@RunWith( SpringRunner.class )
@DataJpaTest
@ComponentScan(basePackages = "com.basepackage.config")
public class PersonRepositoryTest {

    // Tests ...
}

특정 구성 클래스를 하나만 원하는 경우 다음 작업을 수행할 수 있습니다.

@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=MyConfig.class)
public class PersonRepositoryTest {

    // Tests ...
}

또는 다음을 포함하는 여러 클래스:

@ContextConfiguration(classes={MyConfig1.class, MyConfig2.class})

언급URL : https://stackoverflow.com/questions/43705720/how-do-i-import-configuration-classes-in-a-datajpatest-in-a-springboottest