inflearn logo
강의

講義

知識共有

本当!コトリンとスプリングブートで図書館アプリケーションを開発する(Javaプロジェクトリファクタリング)

7強。 Junit5でSpring Bootをテストする

DB 값 질문

解決済みの質問

465

jmrandomname

投稿した質問数 10

1

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

바로 질문 드리자면,!

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

 

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

 

감사드립니다.

refactoring spring spring-boot 리팩토링 kotlin java

回答 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

67

2

실행이 안되네요

0

65

2

프론트 영역 보는법

0

51

2

companion object

0

75

2

Custom 레프직토리 형식

0

56

2

Querydsl 도입

0

67

2

fetch join DISTINCT 중복제거

1

82

2

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

0

85

3

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

1

177

2

테스트를 위한 코드

1

105

2

프로젝트 실행 에러

0

150

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

310

3

junit import 불가

0

269

3

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

1

216

1

hibernate가 select를 두번 하는 이유

0

237

1