나의 브을로오그으

#2-3. [스프링 핵심 원리-기본편] - 회원 도메인 실행 및 테스트 본문

Spring

#2-3. [스프링 핵심 원리-기본편] - 회원 도메인 실행 및 테스트

__jhp_+ 2022. 7. 13. 08:43

[간단하게 실행해보기]

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, "홍길동", Grade.VIP);
        // 회원가입
        memberService.join(member);

        // 회원조회
        Member result = memberService.findMember(1L);
        
        // 결과확인
        System.out.println("이름 : " + result.getName() + ", 등급 : " + result.getGrade());

    }
}

그러나 이렇게 MainMethod에서 테스트하는것에는 한계가 있으며, 좋은 방법이 아니다.

 

[테스트 케이스 만들기]

 

[test/java/hello/core/member/MemberServiceTest]

package hello.core.member;

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, "홍길동", Grade.VIP);

        // when
        memberService.join(member);
        Member findMember = memberService.findMember(member.getId());

        // then
        Assertions.assertThat(member).isEqualTo(findMember);
    }
}

- 회원 도메인 설계의 문제점

* 이 코드의 문제점은 뭘까?

* 다른 저장소로 변경할 때  OCP원칙을 지키고 있을까?

* DIP를 잘 지키고 있을까?

 

MemberServiceImpl에 memberRepository의 타입이 MemberRepsoitory로 추상화에 의존하고 있지만 실제 구현체(MemoryMemberRepository)를 참조하고 있기(의존)때문에 이것은 잘못되었다. DIP를 위반하고 있는 것이다.