Study/Spring

[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해1 - 예제 만들기(회원 도메인 실행과 테스트)

black6765 2022. 12. 3. 16:42

MemberApp 클래스 생성

  • MemberService의 join 기능이 정상 작동하는지 확인
package hello.core;

import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;

public class MemberApp {

    public static void main(String[] args) {
        MemberService memberService = new MemberServiceImpl();
        Member member = new Member(1L, "memberA", Grade.VIP);
        memberService.join(member);

        Member findMember = memberService.findMember(1L);
        System.out.println("new member = " + member);
        System.out.println("findMember = " + findMember);
    }
}
  • 출력
    • new member = memberA
    • find Member = memberA
  • 해당 코드는 스프링 관련 코드가 없음. 순수 자바로 개발
  • 하지만 일일이 눈으로 테스트 하는 것은 좋은 방법이 아님
    • ⇒ junit이라는 테스트 프레임워크 사용
    • 빌드 될 때 test에 대한 코드는 운영환경에 배포가 되지 않음

MemberServiceTest

  • 테스트 코드 작성
    • given - when - then으로 나누어 테스트 코드 작성
    package hello.core;
    
    import hello.core.member.Grade;
    import hello.core.member.Member;
    import hello.core.member.MemberService;
    import hello.core.member.MemberServiceImpl;
    import org.assertj.core.api.Assertions;
    import org.junit.jupiter.api.Test;
    
    public class MemberServiceTest {
    
        MemberService memberService = new MemberServiceImpl();
    
        @Test
        void join() {
            // given
            Member member = new Member(1L, "memberA", Grade.VIP);
    
            // when
            memberService.join(member);
            Member findMember = memberService.findMember(1L);
    
            // then
            Assertions.assertThat(member).isEqualTo(findMember);
        }
    }
    
    • Assertions는 org.assertj.core.api.Assertions를 사용
    • join한 멤버와 findMember의 리턴 값이 같은지 확인하는 코드
    • 테스트가 실패하면 확실하게 표시가 되기 때문에 훨씬 테스트가 용이함
    • 테스트 코드는 선택이 아닌 필수

회원 도메인 설계의 문제점

  • 의존관계가 인터페이스 뿐만 아니라 구현까지 의존함(MemberServiceImpl)
  • 추상화에도 의존하고 구체화에도 의존함
  • DIP 위반 → 변경이 있을 때 문제가 됨

 

※ 본 게시글은 인프런의 스프링 핵심 원리 - 기본편(김영한)을 수강하고 정리한 내용입니다.