inflearn logo
강의

Khóa học

Chia sẻ kiến thức

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)

Bài học 7. Kiểm tra Spring Boot với Junit5

DB 값 질문

Đã giải quyết

466

jmrandomname

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

1

안녕하세요 코틀린강의부터 코프링까지 잘 듣고 있습니다.

바로 질문 드리자면,!

1.saveUserTest2라는 테스트케이스를 한 개 더 만들어서 모든 테스트를 진행 시킨다면, saveUserTest는 통과하지만 saveUserTest2는 DB데이터가 2개가 있어서 통과되지 못 합니다. 이럴 때는 어떻게 해야 독립적으로 DB값을 가지게 할 수 있나요? @Transactional 쓰는 rollback된다고 얼핏 들은 거 같은데 잘 모르겠네요..

 

2.실제 h2 DB에는 유저가 2명이 저장이 되어 있는데 테스트환경에서는 0명인 이유는 @SpringBootTest 어노테이션이 실제 실행환경과 완전히 독립된 환경을 만들어 주어서 그런 건가요?

 

감사드립니다.

refactoring spring spring-boot 리팩토링 kotlin java

Câu trả lời 1

0

lannstark

안녕하세요, 차가운물님!! 😊 좋은 질문 질문 감사드립니다!! 🙏

하나씩 답변 드려보겠습니다!

 

[1. 공유자원 관리]

서로 다른 테스트 함수에서 같은 DB를 사용해서 테스트가 실패하는 경우, 말씀해주신것처럼 @Transactional 어노테이션을 활용해서 rollback을 시키는 방법도 있고요!

@AfterEach 어노테이션이나 @BeforeEach 어노테이션에서 사용했던 DB 자원을 정리해주는 방법도 있습니다! 두 번째 방법을 <8강. 유저 관련 기능 테스트 작성하기>에서 소개해드리고 있어요!

개인적인 선호는 두 번째 방식인데요!! 그 이유는 트랜잭션 어노테이션을 테스트 함수에 작성하게 되었을 때, 원래는 테스트가 실패해야 함에도 @Transactional 어노테이션이 생김으로 인해 테스트가 성공해버릴 수 있기 때문인데요! 이 경우 잘못된 정보를 알려주기 때문에 매우 위험한 테스트라고 할 수 있습니다. 그래서 이런 경우를 원천적으로 막기 위해 저는 저는 두 번째 방식을 선호합니다!!

 

[2. H2 환경]

그렇지는 않습니다! 정확히는 @SpringBootTest 가 독립된 환경을 만들어주지 않고, 현재 되어 있는 H2 의 기본 설정 자체가 스프링이 시작할 때 완전히 새로운 H2 (메모리 DB) 를 만들도록 되어 있어 가능한 것입니다!

만약 테스트를 시작할 때 (그래서는 안되겠지만..) 개발환경의 MySQL을 쓰거나 운영환경의 MySQL을 쓰도록 하면 진짜 해당 DB의 데이터를 가져와 테스트가 이루어지게 됩니다.

 

혹시나 또 궁금한 점 있으시면 편하게 질문 주세요~

감사합니다! 🙇

 

 

0

jmrandomname

아하 친절하고 빠른 답변 감사드립니다!

2번 질문에서 ddl 설정이 create로 되어 있어서 그런거였군요

환경을 mysql로 바꾼 뒤 ddl-auto를 validate로 하니까 테스트의 결과가 실제 DB에 반영이 되는군요.(실제론 그래서는 안되겠지만..)

감사합니다.

0

lannstark

ㅎㅎㅎ 맞습니다! 그래서 혹시나 개발환경 혹은 운영환경 profile 설정을 하고 테스트를 돌리면 끔찍한 일이 벌어지죠... 이런일을 아예 막기 위해 IP차단(ex. RDS security group) 등을 하게 되고요!

감사합니다!! 🙏

안녕하세요 혹시 프론트 코드 제공받을 수 있을까요?

0

68

2

실행이 안되네요

0

66

2

프론트 영역 보는법

0

51

2

companion object

0

78

2

Custom 레프직토리 형식

0

57

2

Querydsl 도입

0

67

2

fetch join DISTINCT 중복제거

1

83

2

표준 예외와 커스텀 예외 사용 전략 질문

0

86

3

이 질문이 왜 없는지 이해가 안 되지만 문제 인식 및 해결 방법 남깁니다.

1

177

2

테스트를 위한 코드

1

105

2

프로젝트 실행 에러

0

151

2

PDF 문서에 오타가 있어서 알려드립니다.

1

102

1

enum질문

1

86

1

테스트 후 AfterEach 함수에서 나오는 쿼리

0

136

2

테스트 fixture

1

210

2

./gradlew test 실행시 인식할수 없다고 뜹니다.

0

140

1

test 코드 실행시 경고가 발생합니다.

0

140

1

13강 User Kotlin 변환중

2

169

3

'추가 - 코프링과 플러그인' 강의 7:46 allopen 관련 질문

2

174

1

-

0

141

2

4:28 build.gradle 수정 시 kotlin-reflect관련 implementation 추가 해야할까요?

0

312

3

junit import 불가

0

271

3

테스트 코드와 관련하여 질문이 있습니다.

1

218

1

hibernate가 select를 두번 하는 이유

0

240

1