Junit Test Application-34-@Sql.teardown

jaegeunsong97·2023년 8월 8일
0

Junit Bank Application 깃허브

Junit Bank Application 기록 노션

  • 원리 이해

테스트 클래스에 @Transactional을 붙였다. 그러면 각 테스트들은 독립적으로 실행이 된다. 하지만 각 테스트전에 실행되는 setUp()은 N개의 테스트개수 만큼 실행이 된다.

그러면 setUp()에 ssar, cos를 insert하는 쿼리가 있다고 생각하면 계속해서 PK가 증가하면서 넣게된다.

따라서 각 테스트가 끝날 때마다 PK증가 전략을 초기화해주는 코드를 넣어야한다.

SET REFERENCIAL_INTEGRITY FALSE; -- 모든제약조건 비활성화
drop table transaction_tb;
drop table account_tb;
drop table user_tb;
SET REFERENCIAL_INTEGRITY TRUE; -- 모든제약조건 활성화

다음 SQL문은 테스트마다 테이블을 drop 후 create를 한다. 안좋다. 다음과 같이 바꾼다.

SET REFERENTIAL_INTEGRITY FALSE; -- 모든 제약조건 비활성화
truncate table transaction_tb;
truncate table account_tb;
truncate table user_tb;
SET REFERENTIAL_INTEGRITY TRUE; -- 모든 제약조건 활성화

truncate는 내용만 지운다. 이렇게 만들어서 Auto_increment를 초기화 하자. @Transaction 대신에 컨트롤러에는 모두 이거를 붙이자.

@ActiveProfiles("test") // 테스트 모드
@Sql("classpath:db/teardown.sql")
@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
public class AccountControllerTest extends DummyObject {
.
.
.

@ActiveProfiles("test") // 테스트 모드
@Sql("classpath:db/teardown.sql") // BeforeEach 직전 실행
@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
public class UserControllerTest extends DummyObject {
.
.
.
@Sql("classpath:db/teardown.sql") // BeforeEach 직전 실행
@ActiveProfiles("test")
@AutoConfigureMockMvc // Mock(가짜) 환경에 MockMvc가 등록됨
@SpringBootTest(webEnvironment = WebEnvironment.MOCK) // 가짜 환경 테스트
public class SecurityConfigTest {
.
.
.
@Sql("classpath:db/teardown.sql") // BeforeEach 직전 실행
@ActiveProfiles("test")
@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
public class JwtAuthenticationFilterTest extends DummyObject {
.
.
.

결론 : @Transaction -> @Sql(티어다운!!)

profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글