inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Practical Testing: 실용적인 테스트 가이드

Classicist VS. Mockist

마이바티스와 테스트 코드

해결된 질문

1079

endeavor

작성한 질문수 7

4

spring tdd jpa mockito 소프트웨어-테스트 junit5

답변 1

6

박우빈

안녕하세요, endeavor님! :)

이미 많은 고민을 해주셨네요. 먼저 방법을 찾고자 고군분투하신 점 멋지다는 말씀 드리고 싶습니다. 👍

우리가 통합 테스트를 작성할 때를 곰곰히 생각해보면, 결국 서버를 실행하고 검증 시에 findAll() 등을 사용해서 데이터베이스에 저장되어 있는 데이터를 꺼내어 검증한다는 것은, 자동화된 테스트에서 불가피한 행위라는 것을 알 수 있습니다.
when절 수행 후에 디버거를 걸어 놓고 우리가(사람이) DB에 직접 접속해서 눈으로 데이터를 하나하나 확인하고 검증하는 것이 아니라면, 테스트 행위가 기대한대로 잘 수행되었는지를 확인하는 방법은 DB에 저장되어 있는 데이터를 꺼내어 비교 검증하는 방법 밖에 없으니까요.
(사람이 직접 눈으로 확인한다는 것은 애초에 자동화된 테스트가 아니기도 하고요.)

JPA를 사용하나 Mybatis를 사용하나 기술이 달라지더라도, 그 편의성의 차이만 있을 뿐, 방법은 동일합니다.
즉, 강의 중에 JPA에서 미리 정의해 준 findAll()을 편하게 사용했듯이, Mybatis에서도 findAll()을 정의하여 사용하면 되는 것이죠.

물론 말씀 주신 것처럼 프로덕션 코드에서 사용하지 않는 메서드를 정의하는 것에 대한 단점이 명확하게 존재합니다.
특히 findAll()의 경우 프로덕션 코드에서 잘못 사용하면 시스템에 큰 영향을 줄 수도 있기 때문에 더욱 주의가 필요한데요. (실수로 1억 건 짜리 테이블에 findAll()을 하여 where절 없는 조회 쿼리를 날린다던지)

다만 이 또한 Trade-off로, 기술의 한계로 인해 개발자가 스스로 주의하면서 의식적인 사용법을 인지해야 하는 경우가 생길 수 있다는 점을 염두에 두시면 좋을 것 같아요.
프로덕션 코드에서 해당 기능을 의식적으로 사용하지 않을 수 있도록 하는 여러 장치들을 한번 같이 고민해보시면 좋을 것 같습니다. (테스트 환경에서의 설정, 프로퍼티를 별도로 구성할 수 있을지, 하다못해 주석이라도)

도움이 되셨기를 바랍니다.
감사합니다! :)

2

endeavor

개발은 항상 Trade-off.. 좋은 답변 감사합니다😀 !!!

 

2

brucehan_business

질문자분과 비슷한 상황의 지나가는 1인 감탄하고 갑니다😻

private 상수 테스트 관련 질문

0

82

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

124

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

159

2

테스트 문서화 질문입니다

0

104

2

단위테스트 질문이 있습니다

0

94

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

100

2

ERD 가장자리에 있는 도메인 테스트 질문

0

86

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

131

2

OrderCreateRequest DTO에 대해서 궁금한점

0

101

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

154

2

계층 관련 질문이 있습니다.

0

137

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

122

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

133

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

226

2

Service+Repository 통합테스트 관련 질문입니다.

0

149

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

183

2

test 용 .yml

0

89

2

throws Exception

0

78

2

카페키오스크 클래스 문의 ,,

0

87

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

171

2

테스트 코드에서 필요한 생성자

0

136

1

tearDown 순서

0

114

2

@Builder 생성자 private

0

133

2

@DisplayName gradle / intellJ

0

91

2