스프링부트 테스트

Lee Seung Jae·2022년 2월 21일
0

테스트 코드 Data 넣기

테스트 코드 작성중 매번 initData 들을 빌더로 생성해서 테스트를 하니까 JPA 테스트를 할 때에 상당히 불편했다.

스터디 도중 방법을 알게되어 포스팅한다.

여러 방법이 있을텐데 main의 resourcesapplication-test.yaml 이라는 프로퍼티를 구현했다.

그리고서는 @ActiveProfiles("test") 을 Test할 클래스에 입력해주게 되면 그 클래스는 프로퍼티를 설정해준 값으로 설정이 되어 동작한다.

기본적으로 스프링 부트에서 테스트코드에서 db를 실행해주는데 data.sqlscheme.sql이라고 한다.

DDL generation

Spring은 EntityScan을 통해 @Entity 어노테이션이 명시한 클래스를 찾는다.

spring.jpa.generate-ddl=true 옵션을 true로 설정하면 해당 데이터를 근거로 서버 시작 시점에 DDL문을 생성하여 DB에 적용한다.

jpa.generate 설정은 JPA 구현체 DDL생성 옵션의 링크이고, true/false 밖에 선택할 수 없다.

대부분 구현체로 Hibernate를 사용하기 때문에 spring.jpa.hibernate.ddl-auto 옵션을 통해서 보다 상세한 데이터베이스 초기화 전략을 설정할 수 있다.

전략에 대한 설명

SQL script

Spring 기본값으로 classpath 루트에 schema.sql 파일이 있다면 서버가 시작할 때 스크립트를 실행한다. schema.sqlDDL 스크립트를 명시해두고, DML문은 data.sql파일로 작성해두면 역시 자동으로 실행한다.

Hibernate 에도 기본 실행 스크립트가 있다는 점을 조심해야 한다.

Hibernateclasspath 루트의 import.sql 파일이 있다면 서버 시작시 해당 스크립트를 자동 실행한다.

만약 Spring이 인식하는 schema.sql 파일과 data.sql 파일이 있거나, spring.datasource.data 옵션을 통해 추가로 적용할 스크립트 파일을 지정했음에도 불구하고, 동일 내용으로 import.sql 파일을 작성한다면 중복 입력으로 오류가 발생할 수 있다.

추가로, Hibernate가 인식하는 import.sql 파일의 경우, 각 명령을 한 줄로 작성해야 문법오류가 발생하지 않는다

또한, JPA는 schema-${platform}.sqldata-${platform}.sql 파일이 있다면 실행시켜 데이터베이스 플랫폼에 맞춘 스크립트 실행이 가능하다. 사용할 플랫폼 정의는 spring.datasource.platform값을 따른다

커스텀으로 Data들을 넣어주려고 할때는 임의의 sql 파일을 생성해준 다음에
테스트 진행할 클래스에서 @Sql("classpath:만든 sql파일.sql")을 넣어주면
쿼리문을 쭉 로딩하면서 넣어준다.

profile
💻 많이 짜보고 많이 경험해보자 https://lsj8367.tistory.com/ 블로그 주소 옮김

0개의 댓글