@Transactional
어노테이션으로 DB 롤백이 가능 ✅@SpringBootTest
에서 RANDOM_PORT
나 DEFINED_PORT
를 사용하는 테스트에서는 적용 불가 ❌RANDOM_PORT
, DEFINED_PORT
를 사용하면 별도의 쓰레드에서 스프링 컨테이너가 실행 된다.@AfterEach
를 사용해 DB 삭제 메서드 작성@Sql
어노테이션을 통한 DB 초기화test/resources/application.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/one_delivery_test?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
spring.datasource.username=root
/resources/sql/truncate.sql
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE cart
TRUNCATE TABLE menu
TRUNCATE TABLE store
...
SET FOREIGN_KEY_CHECKS = 1;
@Sql(scripts = {"/sql/truncate.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql
어노테이션을 통해 테스트 사용에 따라 이전 또는 이후에 DB 초기화 실행SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';') AS list FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'one_delivery_test'
SET FOREIGN_KEY_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 1;
test/resources/application.properties
spring.batch.jdbc.initialize-schema=always