인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

코스모스님의 프로필 이미지
코스모스

작성한 질문수

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

테스트의 필요성과 테스트 3분류

완강 후 질문이 있습니다~!

작성

·

598

·

수정됨

2

안녕하세요 재밌고 알찬 강의 제공해 주셔서 감사합니다.

jpa 와 같이 findById 같은 기본적으로 제공해주는 메서드는 따로 테스트를 안해봐도 될거 같은데..

queryDsl 식으로 커스텀한 쿼리를 호출할때 테스트 방법은 어떻게 해야할지 궁금합니다..

 

h2 와 같은 임베디드디비로 쿼리 조건과 데이터가 잘 나오는지 테스트도 짜고,

다른 인터페이스를 상속받은 구현체의 메서드에서 메모리를 사용해 stream 과 filter 식으로 데이터를 반환하는 구현체를 테스트로 다시 넣어야하는지..

 

h2로 테스트코드를 짜고, 확인 후, 해당 테스트 코드는 지워버려야 하는지..

 

강사님은 어떻게 하고 있는지 궁금합니다..

 

감사합니다.

 

답변 3

1

김우근님의 프로필 이미지
김우근
지식공유자

안녕하세요. 답변이 늦었습니다. 뒤늦게 커뮤니티에 올려주신 질문을 보며 답변을 작성하고 있습니다.

우선 저 또한 JPA에서 제공하는 findById같은 기본적인 메서드는 따로 테스트 안 해봐도 된다는 입장입니다. 왜냐하면 그러한 기능들은 JPA팀에서 이미 테스트를 만들어 테스트하고 있을 것이기 때문입니다. 그렇다면 마찬가지로 queryDsl이 쿼리를 제대로 만드는 지는 굳이 테스트할 필요가 없다는 것이 제 입장입니다.

다만 질문자님은 개발자가 queryDsl에 대한 경험치가 적어서 쿼리를 잘못 만들 수 있는 상황에 관해 염려하시는 것 같습니다. 그래서 내가 만든 쿼리가 나의 의도와 일치하는지가 궁금하신 것 같습니다. 그렇다면 이는 테스트해 볼 가치가 있어 보입니다. 그리고 그럴 때는 h2를 이용해서 테스트해 보는 것이 맞다고 생각합니다.

하지만 이러한 테스트를 장기적으로 프로젝트에서 관리하는 테스트로 계속 갖고 가야 하는지는 의문이 듭니다. 왜냐하면 앞서 말했듯 이러한 테스트는 개발자의 숙련도로 인해 생기는 테스트이기 때문입니다. 우리가 테스트를 만드는 이유는 시스템이 안정적으로 잘 동작하는지 확인하기 위해서이지 queryDsl 교보재를 만들기 위함이 아니니까요.

단편적인 예시로 저 같은 경우 요즘 JPA가 의도한 대로 쿼리를 잘 짜는지에 관한 테스트는 따로 작성하지 않습니다. 혹시나 확신이 없어서 확인해 봐야 하는 경우라면, 질문자님의 이야기처럼 간이 테스트 코드를 짠 후, 원하는 쿼리가 나오는지만 확인하고 지웁니다. 혹은 그냥 로컬에서 서버를 띄워 확인하는 정도로 끝내기도 합니다.

마지막으로 제가 마치 실무자 대표가 되어 이야기하는 것처럼 들릴까 봐 굉장히 조심스럽습니다. 제가 모든 사례를 대표하진 않습니다. 심지어 저는 제가 실무에서 담당하는 프로젝트를 대표하지도 않습니다. 저는 여러 많은 개발자중 하나의 사례일 뿐입니다. 이점 참고 부탁드릴게요.

답변이 도움 되었길 바랍니다. 감사합니다. :)

P.S) 제가 이것저것 하고 싶은 게 많은 유형의 사람이라 항상 사이드 프로젝트를 하고 있습니다. 그러한 까닭에 해당 강의는 질의응답을 하지 않는 강의로 설정해 둔 것이니 양해 부탁드립니다.

0

코스모스님의 프로필 이미지
코스모스
질문자

강사님이 질문 자체를 보지 않는것 같네요...

궁금하긴한데..어떻게 원하는 답을 얻을지..

-3

안녕하세요, 인프런 AI 인턴이에요.

커스텀한 쿼리를 호출할 때에는 테스트 방법에 대해서 궁금하신 것 같네요. 테스트를 작성하는 방법은 다양하지만, 보통은 임베디드 디비를 사용하여 테스트를 진행합니다. 예를 들어 H2 데이터베이스를 사용해서 테스트 데이터를 넣고, 커스텀한 쿼리를 테스트하면 됩니다. 이를 위해 주로 JUnit과 Mockito 같은 테스트 프레임워크를 사용할 수 있습니다.

테스트 코드를 작성할 때에는 필요한 데이터를 넣고 테스트하고 싶은 쿼리를 호출하여 결과를 확인하는 방식으로 작성하면 됩니다. 이렇게 작성한 테스트 코드는 단위 테스트 혹은 통합 테스트 등 다양한 방식으로 지속적으로 실행할 수 있습니다. 이후에는 테스트의 결과를 확인한 후, 해당 테스트 코드를 지울지 유지할지는 상황에 따라서 판단하시면 됩니다.

강사님은 어떻게 하고 계시는지는 정확히 알 수 없지만, 일반적으로 커스텀한 쿼리를 테스트할 때에는 임베디드 디비를 사용하여 테스트 코드를 작성하고, 결과를 확인한 후 필요에 따라서 해당 테스트 코드를 지우거나 유지하는 경우가 많습니다.

더 자세한 내용은 강의에서 소개된 테스트 코드를 참고하시면 도움이 될 것 같아요. 어떤 부분이 헷갈리시거나 더 궁금하신 내용이 있다면 추가로 질문해주세요. 감사합니다.

코스모스님의 프로필 이미지
코스모스
질문자

ai 인턴말고..강사님이 직접 달아주면 좋겠는데.

당신의 답변은 저의 궁금증을 만족시키지 못합니다..흑흑흐긓그흑흑흑흐그

코스모스님의 프로필 이미지
코스모스

작성한 질문수

질문하기