인프런 커뮤니티 질문&답변

희조님의 프로필 이미지
희조

작성한 질문수

스프링 핵심 원리 - 기본편

테스트 코드 작성 질문입니다!

해결된 질문

작성

·

249

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요! 백엔드 개발자를 꿈꾸는 대학생입니다.

Spring 프로젝트를 진행하면서 테스트 코드를 작성하다가 궁금한 점이 생겨서 글을 작성하게 되었습니다.

질문 1.

querydsl을 사용해서 업데이트를 하고 정상적으로 변경되었는지 JPA를 사용해 엔티티를 가져와서 확인할 때 1차 캐시에 값을 가져와서 예상과 다른 결과가 발생했습니다.

캐시에서 값을 가져오지 않게하기 위해서 테스트 코드 내에 entityManager.clear()를 사용하였는데 테스트 코드 내에서 clear() 메소드를 사용하는 것이 안 좋은 코드인지 궁금합니다.

질문 2.

위의 문제를 해결하기 위해서 JPA의 dirty checking을 이용하도록 코드를 수정했습니다.

제가 공부하기로는 dirty checking은 변경된 부분만 변경하지 않고 모든 필드를 수정하기 때문에 많은 쿼리를 발생시켜 성능적으로 떨어질 수 있다고 알고 있습니다.

그렇다면 필드가 적을 경우에는 dirty checking을 사용해도 무방한 지와

만약에 dirty checking을 지양하는 다른 이유가 있다면 어떤 이유인지 궁금합니다.

질문 3.

김영한 개발자님이 생각하시는 잘 작성된 테스트 코드란 무엇인가?가 너무 궁금합니다!

 

강의 내용과 약간? 무관한 내용인 것 같아서 죄송합니다..!

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. gmlwh124님^^

질문1

테스트에서 어떤 것을 증명하기 위해 필요하다면 clear() 메소드를 사용하는 것은 괜찮다고 생각합니다. 물론 사용하지 않을 수 있는 상황이라면 더 좋구요

질문2

이 부분은 JPA 기본편 강의에서 자세히 말씀드립니다. JPA 기본편 강의를 참고해주세요^^

질문3

코드 레벨에서 좋은 테스트를 작성하는 방법은 이미 검증된 좋은 책들이 많으니 참고하시면 좋겠습니다^^

제가 테스트에 대해서 가장 중요하게 생각하는 점을 말씀드리면 어쩌면 당연할 수 있는데, 모든 곳에 테스트를 무한정 적용할 수는 없으니, 우리 도메인에서 정말 중요한 핵심 비즈니스 로직을 검증하는 것이 테스트에서 가장 중요하다 생각합니다.

예를 들어서 주문 시스템이라면 주문의 조회 화면 보다는 주문 그 자체를 검증하는 것이 중요하겠지요?

도움이 되셨길 바래요.

감사합니다.

희조님의 프로필 이미지
희조
질문자

하나하나 친절하게 답변해주셔서 너무 감사드립니다..!!

개발자님 실제로 뵙는 날까지 성장하겠습니다!

희조님의 프로필 이미지
희조

작성한 질문수

질문하기