강의

멘토링

로드맵

Inflearn brand logo image

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

71kimty님의 프로필 이미지
71kimty

작성한 질문수

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

21강. 책의 분야 추가하기

테스트를 위한 코드

작성

·

69

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

테스트를 위한 코드로 보이는 fun fixture 라는 생성자 만드는 코드를 엔티티 안에 생성해주셨는데
테스트가 아니면 따로 사용되지 않을 것 같은 코드를 엔티티 단 안에 작성해도 괜찮나요?

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요! 71kimty님~ 🙂 정말 좋은 질문이십니다. AI 인턴이 얘기해 준 것 처럼, fixture 함수를 Entity 클래스 안에 (더 정확히는 production 코드 안에) 넣게 되면 장단점이 있다고 생각해요.

  • 장점은 멀티 모듈에서 하위 모듈 (보통 하위 모둘에 Entity가 들어가죠) 의 fixture를 상위 모듈에서 쉽게 접근할 수 있다 는 것이고

  • 단점은, 어쨌거나 프로덕션 코드에서 fixture에 접근 가능하다는 것이죠.

    • (만약 test 코드 안에 fixture를 작성하면 상위 모듈에서 하위 모듈의 fixture를 사용할 수 없게 되어 상당히 불편합니다 🥲)

저는 마치 kotlin의 public var 필드처럼 열어두지만 사용하지 않는 것을 convention으로 하는 편이고, 요즘은 Entity companion object에 fixture를 바로 넣지 않고 같은 패키지에 object UserFixtures 와 같은 싱글톤을 만들어 테스트 함수를 넣는 편입니다.

 

만약, 위에서 말씀드린 단점을 극복하면서도 장점을 누리고 싶다면,

https://tech.kakaopay.com/post/given-test-code-2/

를 참고해보셔도 좋습니다.

java-test-fixtures 와 같은 라이브러리를 사용하면 프로덕션 폴더도 아니고 테스트 폴더도 아닌 제 3의 구조를 만들어 의존성 설정이 되어 있는 모듈에서 쓸 수 있게끔 처리할 수 있습니다. 개인적으로도 좋은 방법이라 생각합니다. 🙂

 

답변이 도움이 되었으면 좋겠습니다. 감사합니다. 🙇

0

안녕하세요, 인프런 AI 인턴입니다. 71kimty님, 질문해주셔서 감사합니다. 테스트를 위해 엔티티 클래스 내에 fun fixture와 같은 함수를 두는 것에 대해 고민이 있으신 것 같네요.

엔티티 내 테스트용 코드 배치

테스트를 위한 코드를 엔티티 내부에 두는 것은 코드의 간결성과 테스트의 편의성을 위해 때때로 선택되는 방법입니다. 그러나, 이 방식이 항상 최선인 것은 아닙니다. 프로젝트 스타일이나 팀의 규칙에 따라, 테스트 코드와 프로덕션 코드를 명확히 분리하는 것이 더 나은 경우도 있죠.

fixture 함수의 장단점

  • 장점: 코드가 엔티티와 밀접하게 관련되어 있어, 테스트 코드를 작성할 때 명확한 이점을 제공합니다. 또한, 테스트 설정이 엔티티의 변경에 즉시 반영된다는 장점이 있습니다.
  • 단점: 테스트 코드가 프로덕션 코드 내부에 존재하게 되므로, 실제 애플리케이션에 불필요한 코드가 포함될 수 있습니다. 이는 코드의 가독성을 저하시킬 수 있으며, 유지보수 시 혼란을 초래할 수 있습니다.

관련 질문 및 답변

이와 관련하여 테스트 픽스쳐 관련 게시물에서 최태현 강사님이 멀티 모듈 환경에서의 테스트 픽스쳐 전략에 대해 설명하신 부분이 있습니다. 그 내용을 통해 엔티티 내부에 두는 것의 장단점 및 다른 방법(프로덕션 코드와 테스트 코드를 분리하여 관리하는 방법)에 대해서도 고민해 보시면 좋을 것 같습니다.

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

71kimty님의 프로필 이미지
71kimty

작성한 질문수

질문하기