ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring 완전정복 4 / 테스트 코드(Service)
    Spring(Web) 2022. 4. 19. 19:09

    Repository에 이어서 Service에대한 테스트 코드도 작성했는데, 역시 실제 서비스 실행 부분이기도해서 그런지 Repository 테스트 코드보다는 비교적 어려웠다.

     

    논외로, 강의에서는 "어차피 빌드해도 테스트 코드는 빌드되지 않으니, 테스트 메소드들은 한글이어도 된다"라는 점도 말씀해주셔서 좋았다.

     

    다른 부분들은 이전 Repository 테스트 코드와 별반 다르지 않았지만, dependency injection이 추가된 부분이 조금 혼동스러웠다.

    아래 테스트 코드에서는 테스트가 진행될 코드에서 사용된 member Repository 객체를 그대로 가져와서 테스트를 진행한다.

     

    MemoryServiceTest

     

    Dependency injection (의존성 주입)

        MemberService memberService;
        MemoryMemberRepository memberRepository;
    
        @BeforeEach
        public void beforeEach() {
            memberRepository = new MemoryMemberRepository();
            memberService = new MemberService(memberRepository);
        }

     

    MemoryService

    public class MemberService {
    
        private final MemberRepository memberRepository;
    
        public MemberService(MemberRepository memberRepository) {
    
            this.memberRepository = memberRepository;
        }

    해당 테스트코드에서 사용될 repository 객체는 MemberService 클래스에서 사용되고있는 저장소 객체를 그대로 가져와서 사용해야 하므로, MemberService 클래스에서 memberRepository를 생성하는것이 아닌, 의존성을 다른 클래스로 넘겨주는 방식을 채택했다.

    beforeEach 어노테이션은, 각 테스트 코드가 실행되기 전 실행될 메소드를 지정하는 어노테이션이다.

     

    이 부분을 제외하면 이전 테스트 코드와 비슷해서 그다지 어려운 점은 없었다.

     

    테스트 코드 전체

    package hello.hellospring.service;
    
    import hello.hellospring.domain.Member;
    import hello.hellospring.repository.MemoryMemberRepository;
    import org.junit.jupiter.api.AfterEach;
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
    
    import static org.assertj.core.api.Assertions.*;
    import static org.junit.jupiter.api.Assertions.*;
    
    class MemberServiceTest {
    
        MemberService memberService;
        MemoryMemberRepository memberRepository;
    
        @BeforeEach
        public void beforeEach() {
            memberRepository = new MemoryMemberRepository();
            memberService = new MemberService(memberRepository);
        }
    
        @AfterEach
        void afterEach() {
            memberRepository.clearStore();
        }
    
        @Test
        void 회원가입() {
            //given
            Member member = new Member();
            member.setName("spring");
    
            //when
            Long saveId = memberService.join(member);
    
            //then
            Member findMember = memberService.findOne(saveId).get();
            assertThat(member.getName()).isEqualTo(findMember.getName());
        }
    
        @Test
        void 중복_회원_예외() {
            //given
            Member member1 = new Member();
            member1.setName("spring");
    
            Member member2 = new Member();
            member2.setName("spring");
    
            //when
            memberService.join(member1);
    
            //then
            IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
        }
    
        @Test
        void 멤버찾기() {
        }
    
        @Test
        void findOne() {
        }
    }
Designed by Tistory.