programing

스프링 부트 테스트 전 데이터베이스 초기화

mailnote 2023. 3. 17. 21:48
반응형

스프링 부트 테스트 전 데이터베이스 초기화

JUnit을 사용하여 응용 프로그램을 테스트하고 있으며 테스트 전에 데이터베이스가 초기화되어 있는 한 모든 것이 정상적으로 작동합니다(사용).gradle bootRun웹 앱으로 실행할 수 있습니다).그러나 데이터베이스가 비어 있는 경우, 애플리케이션은 테스트 전에 모델 또는 엔티티를 초기화하지 않는 것으로 보입니다.제가 이걸 어떻게 해야 하나요?나는 추측을 했다.ApplicationRunner클래스는 테스트 전에 실행되며 엔티티를 초기화합니다.이 작업을 수행할 방법이 있습니까?아니면 잘못된 접근 방식을 사용하고 있습니까?

이렇게 해서application.properties파일은 다음과 같습니다.

server.port=8090
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=123456
server.ssl.key-password 123456
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming-strategy:org.hibernate.cfg.ImprovedNamingStrategy
application.logger.org.springframework=INFO

내 데이터베이스는 다음 위치에 저장됩니다./src/main/java/application/persistence/DbConfig.java사용방법DriverManagerDataSource연결.그리고 난 셋업이 있어ApplicationRunner실행 시 DB에 몇 개의 행을 추가합니다.

편집:

JUnit 테스트 파일에서 사용하는 주석도 추가해야 합니다.

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={
    AdeyTrackApplication.class, 
    SecurityConfig.class, 
    WebConfig.class,
    AuthorizationController.class
    })

그것을 명시적으로 실행하지 않는 경우는, 다양한 옵션이 있습니다.@Before쥬니트 훅

  1. Spring Boot의 JDBC 초기화 기능을 사용하여schema.sql또는data.sql안으로src/test/resources폴더, 테스트 중에만 픽업되도록 합니다.
  2. Spring의 @Sql 주석 사용

예를 들어 @Sql annotaion을 사용하여 DB를 채울 수 있습니다.

@Sql(scripts = "classpath:db/populateDB.sql")

위의 답변은 모두 테스트에 .sql 스키마를 사용해야 하는 .sql 스키마 로딩 기술을 사용합니다.스키마가 확장될 것이기 때문에 그렇게 하고 싶지 않았고, 시험이 확장될수록 스키마에 엔트리를 추가하는 번거로움을 겪지 않았으면 합니다.

Spring Boot을 사용하다가 처음 실행함으로써 문제를 해결할 수 있을 것 같은 주석을 발견했습니다.bootRun그리고 테스트를 실시합니다.

내 테스트 주석에서 나는 다음을 대체했다.@ContextConfigurations와 함께@SpringApplicationConfiguration모든 수업을 그대로 두었습니다.이것으로 문제가 해결된 것 같았다.그럼 이제...test태스크는 bootRun을 호출하여 클래스를 로드한 후 테스트를 실행합니다.

@Spring Application Configuration을 참조하십시오.

같은 문제에 직면한 모든 사람에게 도움이 되길 바랍니다.

언급URL : https://stackoverflow.com/questions/38262430/initialising-a-database-before-spring-boot-test

반응형