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

djeuskwiwhe님의 프로필 이미지
djeuskwiwhe

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 리포지토리 테스트 케이스 작성

테스트 코드 작성

작성

·

307

0

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

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

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

[질문 내용]
여기에 질문 내용을 남겨주세요.강사님께서 테스트 케이스를 작성할 때 앞의 테스트가 뒤의 테스트에 영향을 미치는 것을 방지하기 위해 clearStore()를 작성하시고 사용하셨는데 다형성에 의해서 MemberRepository memberRepository = new MemberRepositoryImpl();// 전자이와 같이 쓰는 것으로 알고 있는데 clearStore()를 적용하기 위해서 코드를 직접 구현체 클래스의 타입으로 바꾸셔서 아래와 같이 작성을 하시고 테스트하셨습니다.MemberRepositoryImpl memberRepository = new MemberRepositoryImpl();// 후자MemberRepository 인터페이스에 clearStore()를 써주게 되면 직접 기능 구현을 할 때 당연히 이 추상 메서드가 쓰일 일은 없지만 테스트 케이스를 작성할땐 쓰이고 안 써주면 테스트 케이스를 작성할 때 후자처럼 작성을 해야하잖아요...?
어느 것이 더 좋은 방법이라고 할 수 있을까요? 강사님 방법을 100% 신뢰하면 되는 것일까요?

답변 2

0

안녕하세요. dhwiwnwnf님, 공식 서포터즈 OMG입니다.

clearStore()는 MemoryMemberRepository의 Map 객체(store)의 데이터를 초기화하기 위한 용도로 구현된 메서드입니다.

강의 기준 실제 DB연동을 하는 Repository(Jdbc, JdbcTemplate, Jpa, SpringDataJpa)에는 필요가 없는 기능입니다.

따라서 MemberRepository 인터페이스의 추상메서드로 등록하지 않고, MemoryMemberRepository의 메서드로만 개발이 되었으며, 강의에서 개발한 방식에는 문제가 없습니다.

MemoryMemberRepository의 clearStore()를 사용하지 않고 테스트 케이스를 작성할 때 앞의 테스트가 뒤의 테스트에 영향을 미치는 것을 방지하기 위한 방법은 @Transactional을 테스트에서 명시하여 해결할 수 있으며 이 부분도 강의에서 진행되오니 참고해주세요 😀

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

dhwiwnwnf님의 질문은 테스트 케이스 작성 과정에서 clearStore() 메서드의 적용 방식을 두고 이루어진 것으로 이해됩니다. 인터페이스와 구현체의 사용 문제, 특히 테스트를 위해 인터페이스에 해당 메서드를 추가하는 것이 적절한지에 대한 고민으로 보입니다.

강의 중 보신 clearStore() 메서드의 사용과 관련하여 비슷한 주제로 질문을 한 다른 수강생의 사례를 찾아서 해당 답변을 참고하시는 것이 좋을 것 같습니다.

  • 회원서비스 테스트 clearStore()관련 질문입니다에서는 clearStore()를 사용하는 이유와 인터페이스 대 구현체의 문제에 대한 설명이 있습니다. 이 답변에서는 테스트 과정에서 repository 인스턴스를 초기화하기 위한 방법으로 clearStore() 메서드를 어떻게 활용하는지에 대해서 설명하고 있습니다.

  • clearStore() 메서드의 작성 위치 의문clearStore() 메서드를 실제 클래스에 추가하는 것이 일반적이며, 테스트 케이스에서 이 메서드를 사용하는 것이 적절한지에 대해 다룹니다. 테스트를 위해 사용하는 메서드가 실제 로직에서 사용되지 않을 경우 그 처리 방법에 대한 해설이 포함되어 있습니다.

이러한 참고 자료는 테스트 과정에서 인터페이스와 구현체를 어떻게 다루는 것이 바람직한지에 대한 고민을 해결하는 데 도움이 될 수 있습니다. 특히 테스트를 위해 특정 메서드를 인터페이스에 추가하는 것과 구현체를 직접 사용하는 것의 차이, 그리고 장단점에 대해 생각해 볼 수 있는 기회가 될 것입니다.

질문의 핵심은 테스트 설계의 관점에서 보았을 때, 대부분 테스트 코드는 실제 운영 환경의 코드에서는 사용되지 않는 코드가 포함될 수 있습니다. 테스트의 목적은 실제 코드의 오류 없는 작동을 확인하는 것이기 때문에, 때로는 실제 운영 코드와는 차이가 있는 테스트 전용 코드(예: clearStore())를 작성할 필요가 있습니다. 이 과정에서 중요한 것은 테스트의 목적성을 잘 이해하고, 가독성과 유지보수성을 해치지 않는 선에서 최적의 방법을 선택하는 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

djeuskwiwhe님의 프로필 이미지
djeuskwiwhe

작성한 질문수

질문하기