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

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

Jaeyoung Park님의 프로필 이미지
Jaeyoung Park

작성한 질문수

스프링 핵심 원리 - 기본편

관심사의 분리

관심사의 분리 테스트 코드 수정 - BeforeEach 사용 이유

작성

·

77

0

1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
관심사의 분리 강의 24분 20초대에 MemberServiceTest 테스트 코드 수정 부분입니다.
강사님께서 AppCofig를 바로 사용하시는게 애매하다고 말씀하시고 "BeforeEach"를 통하여, 각 테스트 진행 전 memberService를 새롭게 정의하는 방식으로 알려주셨습니다

궁금한점이, 생성된 memberService 인스턴스가 일부 테스트 함수에서, 멤버 변수로 값을 대입 받는다거나 그런 로직이 있는 경우들 때문에 애매하다고 말씀을 해주신 것일까요? (좀 더 상세하게 알려주시면 감사드리겠습니다)

현재 강의에서 사용되는 MemberServiceImpl 클래스에서 정의되어있는 메서드들은 재활용 되어도 별 문제 없다는 생각이 들어, MemberServiceTest-테스트 클래스 상단에 AppConfig 정의해주고 memberService도 초기화하지 않은 이유에 대해 좀 더 상세하게 알고 싶어 질문 드리게 되었습니다

답변 1

0

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

MemberServiceTest에서 @BeforeEach를 사용하여 각 테스트 전에 memberService를 새롭게 정의하는 이유에 대해 궁금해 하셨군요.

@BeforeEach를 사용하는 이유는 주로 테스트의 독립성을 보장하기 위해서입니다. 각 테스트는 서로 독립적이어야 하므로, 특정 테스트가 다른 테스트의 결과에 영향을 받지 않도록 객체의 상태를 초기화하는 것이 중요합니다.

아래에서 더 상세히 설명해드리겠습니다:

  1. 테스트 독립성: @BeforeEach를 사용하여 각 테스트 메서드가 실행되기 전에 객체를 새로 생성하고 초기화합니다. 이렇게 하면 각 테스트 메서드가 독립적으로 실행되며, 하나의 테스트가 다른 테스트에 영향을 미칠 위험을 줄일 수 있습니다.

  2. 객체 상태 관리: memberService와 같은 객체가 멤버 변수를 가지거나 내부 상태를 변경하는 메서드를 포함하는 경우, 공유된 객체의 상태가 테스트 간에 잠재적으로 불일치할 수 있습니다. 이를 방지하기 위해 각 테스트마다 객체를 독립적으로 초기화합니다.

  3. 유지 보수성 향상: 테스트 코드는 시간이 지나면 변경될 수 있습니다. @BeforeEach를 사용함으로써 초기화 로직을 한 곳에 집중시켜, 유지 및 변경이 용이해집니다.

  4. 미래의 확장 가능성 고려: 현재는 AppConfigmemberService를 상단에서 초기화하여 사용하는 방식도 동작할 수 있지만, 테스트가 추가되거나 객체의 내부 상태 관리가 중요하게 되는 경우 효과적인 방법이 되지 못할 수 있습니다. @BeforeEach를 사용하면 이러한 상황에서도 유연하게 대처할 수 있습니다.

관련해서 강의나 다른 게시판에서 추가 정보를 얻고자 한다면, 아래 링크들을 참고하시면 도움이 될 것입니다:

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

Jaeyoung Park님의 프로필 이미지
Jaeyoung Park

작성한 질문수

질문하기