본문 바로가기
Spring 입문

스프링MVC 입문12

by danny-j 2022. 11. 11.

service/MemberServiceTest

package com.danny.learningspring.service;

import com.danny.learningspring.domain.Member;
import com.danny.learningspring.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
    public void afterEach(){
        memberRepository.clearStore();
    }

    @Test
    void join() {
        //given
        Member member = new Member();
        member.setName("hello");

        //when
        Long saveId = memberService.join(member);

        //then
        Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());

    }

    @Test
    void alreadyJoinExc() {
        //given
        Member member1 = new Member();
        member1.setName("spring");

        Member member2 = new Member();
        member2.setName("spring");

        //when
        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class,
                () -> memberService.join(member2));
        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");

//        try {
//            memberService.join(member2);
//            fail();
//        } catch (IllegalStateException e) {
//            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
//        }
    }
}
  • command+shift+T -- Test클래스와 패키지 자동생성
  • option+enter -- Static import
  • assertThrows(IllegalStateException.class, () -> memberService.join(member2));
    • IllegalStateException.class와 중복인 값을 넣은 member2를 넣었을 때의 예외처리가 같은지
  • assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
    • 예외처리가 실행되고나서 예외처리 메시지가 실제로 나와야하는 예외처리 메시지와 같은지
  • controll+R(shift + F10) -- 이전 실행 메서드 실행
  • @BeforeEach -- 테스트가 실행되기 전에 MemberRepository와 MemberService를 생성하는데 MemberService를 생성할 때 MemberRepository를 직접 주입 해줌으로써 같은 Repository를 쓰게 함(DI)

 

MemberService

@RequiredArgsConstructor
public class MemberService {

    private final MemberRepository memberRepository;

//    public MemberService(MemberRepository memberRepository) {
//        this.memberRepository = memberRepository;
//    }
  • 실행 시 메서드간에 값을 초기화를 시켜줘야 하는데 실제 MemberService의 MemberRepository와 TestMemberService의 MemberRepository는 둘 다 객체 생성을 하고있기때문에 Repository가 서로 다름
  • 생성자를 통해서 DI를 시켜줄 수 있음
  • lombok의 @RequiredArgsConstructor를 사용하면 초기화되지않은 final에 대해 생성자를 생성해줌

'Spring 입문' 카테고리의 다른 글

스프링MVC 입문14  (0) 2022.11.11
스프링MVC 입문13  (0) 2022.11.11
스프링MVC 입문11  (0) 2022.11.10
스프링MVC 입문10  (0) 2022.11.10
스프링MVC 입문09  (0) 2022.11.10

댓글