강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của nateen72481907
nateen72481907

câu hỏi đã được viết

Trong thực tế! Phát triển ứng dụng quản lý thư viện với Kotlin và Spring Boot (tái cấu trúc dự án Java)

Vòng 26. Hiển thị trạng thái cho vay của người dùng - phát triển mã thử nghiệm

테스트 코드와 트랜잭션 문의 드립니다.

Viết

·

339

1

강사님 영상
https://www.youtube.com/watch?v=S_66BYHWT2A

안녕하세요 강사님

강의 잘 보고 있습니다.

강의중 테스트 코드 작성하는 부분에서 궁금한 부분이 있어서요

H2 데이터베이스를 사용해서

하나의 테스트 파일에 여러개의 테스트 코드를 작성하게 되면

auto-increment 가 같이 증가하면서 문제가 발생하더라구요

관련해서 구글링을 해보니까

@Transactional과

this.entityManagr

.createNativeQuery("ALTER TABLE portfolio ALTER COLUMN pofo_post_no RESTART WITH 1")

.executeUpdate();

초기 값으로 초기화 하는 방법이 있더라구요

강사님은 트랜잭션을 서비스 코드에서 사용하지 않는다고 하셨는데

auto-increment 초기화를 어떻게 하시는지 궁금해서 질문 드립니다.

참고 링크

https://github.com/HomoEfficio/dev-tips/blob/master/Spring%20Data%20JPA%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20%EC%8B%9C%20auto-increment%20%EB%AC%B8%EC%A0%9C.md

감사합니다.

javaspring-bootkotlinspringrefactoring

Câu trả lời 2

1

nateen72481907님의 프로필 이미지
nateen72481907
Người đặt câu hỏi

안녕하세요 강사님

자세히 답변 주셔서 감사합니다.

1

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요! 재준님 ㅎㅎㅎㅎ 좋은 질문 올려주셔서 감사드립니다~!! 🙏

  • H2 데이터베이스를 사용해서 하나의 테스트 파일에 여러개의 테스트 코드를 작성하게 되면 auto-increment 가 같이 증가하면서 문제가 발생하더라구요

     

제가 이 내용을 맞게 이해한거라면, 다음과 같은 상황이 되겠군요!!

@Test
fun test1() {
  aRepository.save(A1) // A1의 id는 1이다.
}

@Test
fun test2() {
  aRepository.save(A2) // A2의 id는 2이다.
}

 

사실 저는 H2를 사용해 테스트를 돌릴 때 ID 체번(=Auto Increment) 초기화를 하지 않습니다! 그 이유는 save되어 나온 Entity의 id를 그 후 로직에서 사용하면 되기 때문입니다.

예를 들어 when 절에서 Entity의 id가 필요하다면

@Test
fun test1() {
  // given
  val a = aRepository.save(A1) // A1의 id는 무엇인지 모른다. 실행 순서에 따라 다르다.

  // when
  aService.request(a.id)
}

위와 같이 a.id를 넣어주면 되고요! 비슷하게 then 절에서 필요하다면

@Test
fun test1() {
  // given
  val a = aRepository.save(A1) // A1의 id는 무엇인지 모른다. 실행 순서에 따라 다르다.

  // when
  aService.request(a.id)

  // then
  val updatedA = aRepository.findByIdOrThrow(a.id)
  assertThat(...)...
}

똑같이 저장했던 객체의 id를 사용하면 됩니다!! 😊

혹시 위와 같은 방법으로 커버하기 어려운 경우가 있다면, 편하게 말씀 부탁드리겠습니다!!

좋은 질문 주셔서 감사드립니다~!!! 편안한 밤 되세요!! 🙏

Hình ảnh hồ sơ của nateen72481907
nateen72481907

câu hỏi đã được viết

Đặt câu hỏi