Spring Boot/Test Code

Junit5] org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false

2023. 7. 8. 14:43
목차
  1. 오류상황
  2. TokenRepositoryTest
  3. 내가 생각한 오류 원인
  4. 해결 방법
  5. 1. 아래 어노테이션을 추가한다.
  6. 2. Id 값 대신 token 등 다른 column의 값을 테스트한다.
  7. 3. 아래 stackoverflow 링크를 참고. Repository interface 안에 table을 truncate하는 메소드를 추가한다.
  8. TokenRepository
  9. TokenRepositoryTest
  10. 4. @SpringBootTest 대신, @DataJpaTest를 사용한다.
  11. 참고 링크
반응형

오류상황

 

Spring Boot 테스트 코드를 작성한 뒤, 전체 테스트 코드를 통합 테스트 할 때 아래와 같은 오류 메시지가 발생하였다.

 

 

TokenRepositoryTest

해당 class를 단독으로 test할 때는 오류가 발생하지 않았으나, 전체 클래스를 통합 테스트 할 시에는 위 사진과 같은 오류가 발생함.

 

내가 생각한 오류 원인

TokenRepositoryTest class 이전에 AuthServiceTest.class 에서 이미 refresh_token table을 생성하고 데이터를 넣은 뒤 Rollback시킨다(@Transactional). 하지만 table에 적용된 Auto Increment 값은 이미 1에서 2로 증가한 상태라, TokenRepositoryTest에서 row 2개를 insert하였을 때, 값이 1, 2가 아닌 2, 3이 출력된다고 생각한다.

 

 

해결 방법

1. 아래 어노테이션을 추가한다.

  • 아래 어노테이션을 추가하니 통합 테스트는 성공하였으나, 해당 어노테이션에 대한 정확한 이해를 아직 하지 못하였으므로, 사용하지 않기로 함.
@TestPropertySource(properties = "spring.test.context.listener.include=org.springframework.test.context.event.ApplicationEventsTestExecutionListener")

 

2. Id 값 대신 token 등 다른 column의 값을 테스트한다.

 

 

3. 아래 stackoverflow 링크를 참고. Repository interface 안에 table을 truncate하는 메소드를 추가한다.

 

TokenRepository

public interface TokenRepository extends JpaRepository<RefreshToken, Long> {

	// ...

    @Modifying
    @Query(
            value = "truncate table refresh_token",
            nativeQuery = true
    )
    void truncateRefreshTokenTable();
}

 

TokenRepositoryTest

@BeforeEach
void init() {
    tokenRepository.truncateRefreshTokenTable();
}

 

4. @SpringBootTest 대신, @DataJpaTest를 사용한다.

@Transactional
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@DataJpaTest
@TestPropertySource(locations = "classpath:application.yml")
class TokenRepositoryTest {
	// ...
}

 

 

참고 링크

1. 테스트 메소드별로 독립된 환경에서 테스트하기. https://unluckyjung.github.io/testcode/2021/05/08/Independent-Test-Mehod/

2. ChatGPT에게 질문

3. stackoverflow Is it possible to use "TRUNCATE" in Spring Data JPA using JpaRepository? Or a more effective method than the standard deleteAll()?

4. 

 

 

 

 

반응형

'Spring Boot > Test Code' 카테고리의 다른 글

Junit5] WebMvcTest: java.lang.AssertionError: JSON path  (0) 2023.07.15
Junit5] 테스트 코드 작성을 위한 서비스 코드 리팩토링  (0) 2023.07.14
Junit5] NullPointerException with @Value  (0) 2023.07.02
Junit5] WebMvcTest: MockHttpServletResponse: Status = 401 Error message = Unauthorized  (0) 2023.07.01
Junit5] WebMvcTest  (0) 2023.06.09
  1. 오류상황
  2. TokenRepositoryTest
  3. 내가 생각한 오류 원인
  4. 해결 방법
  5. 1. 아래 어노테이션을 추가한다.
  6. 2. Id 값 대신 token 등 다른 column의 값을 테스트한다.
  7. 3. 아래 stackoverflow 링크를 참고. Repository interface 안에 table을 truncate하는 메소드를 추가한다.
  8. TokenRepository
  9. TokenRepositoryTest
  10. 4. @SpringBootTest 대신, @DataJpaTest를 사용한다.
  11. 참고 링크
'Spring Boot/Test Code' 카테고리의 다른 글
  • Junit5] WebMvcTest: java.lang.AssertionError: JSON path
  • Junit5] 테스트 코드 작성을 위한 서비스 코드 리팩토링
  • Junit5] NullPointerException with @Value
  • Junit5] WebMvcTest: MockHttpServletResponse: Status = 401 Error message = Unauthorized
나른한 찰리
나른한 찰리
반응형
나른한 찰리
Moojun's Storage
나른한 찰리
전체
오늘
어제
  • 분류 전체보기 (83)
    • 포트폴리오 스프링 부트 프로젝트 (1)
    • 멘질멘질] 2023 졸업 프로젝트 (16)
    • 학부연구생 (5)
    • Spring Boot (17)
      • Test Code (10)
    • Amazon Web Services(AWS) (3)
    • Ubuntu Server (1)
    • RDB (6)
    • git (1)
    • 오류 (9)
    • MacOS (4)
    • python library (5)
    • 기타 (8)
    • 프로그래밍 도서 (4)
      • 클린 코드(로버트 마틴) (4)
    • 코딩 테스트 (3)
      • 프로그래머스 (3)
    • 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 우분투#ubuntu#mysql#mysql설치#mysql오류
  • pandas#dataframe

최근 댓글

최근 글

hELLO · Designed By 정상우.
내 관리 화면으로 이동
나른한 찰리
Junit5] org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.