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

19님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

주문과 할인 도메인 실행과 테스트

5분대부터 말씀하신 테스트에 대한 질문

해결된 질문

작성

·

218

0

안녕하세요 영한님. 강의 너무 잘 듣고 있습니다.

다름이 아니라 강의 듣다가 테스트 코드의 중요성을 말씀해주셨는데, 궁금한 점이 있어서요

 

  1. 단위 테스트를 작성하는 것이 좋다

  2. 단위 테스트는 스프링이나 DB를 활용하는 것이 아니다

이렇다면, 단위 테스트할 때는 Fake 객체를 사용해서 단위테스트를 작성해야 하는 걸까요?

 

인터페이스로 역할과 구현이 분리된 상태에서 MemberRepository의 구현체를

프로덕션에서 사용하는 MemoryMemberRepository,

테스트 환경에서 사용할 FakeMemberRepository

로 분리해서 사용하는 걸까? 하는 궁금함이 있어 여쭈어봅니다

 

항상 좋은 강의 감사합니다!!

답변 1

1

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

안녕하세요. 19님

생각하신 내용이 맞습니다 🙂

그래서 DI가 중요한 것이지요.

감사합니다.

19님의 프로필 이미지
19
질문자

안녕하세요. 영한님 답변 감사합니다!

추가로 여쭙고 싶은건, fake로 만든 repository로 테스트하는건 간단한 crud만이고, 이외의 복잡한 로직등은 mockito를 사용해서 해결하는건지 궁금합니다..!

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

fake가 직접 만든 가짜 객체로 이해했습니다. mockito가 fake 역할을 대신 해주기 때문에, 둘중 원하는 것을 선택하시면 됩니다. 실용적으로 mockito를 사용하시는게 좀 더 편하실거에요.

mockito 지원 범위를 넘어서 특별하게 뭔가 조작하는 코드가 더 필요하다면 fake를 사용하시면 됩니다.

감사합니다.

19님의 프로필 이미지
19
질문자

답변 감사합니다.

  1. 그렇다면 혹시 Mockito를 사용해 테스트하실 때, Stub해서 테스트를 하시는 걸까요..?

  2. 그리고 Local로 FakeRepository를 구현해서 사용하면, 그룹바이, 집계등등 복잡해지는 쿼리들을 어떻게 처리하신지 궁금합니다.
    저는 이런 부분은 Local로 구현해서 사용하기 어려우니까 이 때 Mockito로 stub해서 사용하시는걸까 싶었거든요! 그래서 답글을 남겼던 것이었습니다
    제가 설명을 잘 못했던 것 같습니다😭

  3. 영한님은 어떤 스타일로 테스트를 하시는지 궁금합니다.
    단위테스트하실 때, 역할과 구현을 분리하고 Fake객체를 구현해 테스트하시는지, 아니면 Mockito를 사용해 테스트하시는지, 사용하신다면 Mockito의 어느 기능들을 주로 사용해서 테스트하시는지 궁금합니다..!
    더욱이 서비스레이어 뿐만 아니라, 컨트롤러/리포지토리 계층도 테스트하시는지,
    실무에서 통합테스트를 하실 때엔 H2를 사용하시는지 TestContainer를 사용하시는지도 궁금합니다

     

귀찮게 자꾸 질문드리는점.. 양해부탁드립니다ㅏ
스프링 스승님이신 영한님께 꼭 여쭤보고 싶었습니다!

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

안녕하세요. 19님

  1. 네 맞습니다.

  2. FakeRepository를 만들면 해당 테스트를 진행할 수 없습니다. 이 경우 DB까지 연동되는 테스트를 작성해야 합니다. 원래 Repository를 사용하고 데이터를 임의의 데이터를 넣어두어야 합니다.

  3. 이 부분은 모든 것을 다 활용한다고 보시면 됩니다. 기본적으로 단위 테스트가 가장 중요하고, 단위 테스트만으로 해결하기 어려운 테스트들은 DB를 연결하는 식의 통합 테스트도 필요합니다. 테스트 관련해서는 테스트 서적을 한번 찾아서 공부해보시는 것을 권장드려요.


    감사합니다.

     

19님의 프로필 이미지

작성한 질문수

질문하기