Spring : Test 코드 작성(2)

김선미·2022년 8월 29일
0

단축키

  • ctrl + shift + t : 테스트 코드 자동 작성
  • ctrl + R : 이전에 run (실행) 한것 다시 실행

assertThrow

예외처리를 테스트 할때 try-catch문 대신에 assertThrow를 사용할 수 있다.

  • try-catch문
@Test
    public void 중복회원예외() {
        //given
        Member member1 = new Member();
        member1.setName("spring");

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

        //when
        memberService.join(member1);

        try {
            memberService.join(member2);
            fail();
        } catch (IllegalStateException e) {
            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다");
        }

        //then
    }
  • assertThrow
@Test
    public void 중복회원예외() {
        //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("이미 존재하는 회원입니다");

        //then
    }

여러개의 repository 객체 생성 방지

여러 개의 테스트 코드 클래스를 생성하면서 여러개의 새로운 레포지토리 객체가 생성되며 레포지토리 객체의 내용이 서로 달라질 수 있다. 이것을 방지하기 위해 서비스에 레포지토리 생성자를 만들고, @BeforEach를 통해 모든 테스트 코드 실행 직전에 레포지토리를 생성하도록 한다. 매번 새로운 객체를 생성하는 것이 아니라 생성자를 외부에서 주입하는 것을 DI(의존성 주입)라고 한다.

  • MemberService
private final MemberRepository memberRepository;

public MemberService(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
  • MemberServiceTest
MemberService memberService;
MemoryMemberRepository memberRepository = new MemoryMemberRepository();

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

참조
스프링 입문 - 김영한

profile
백엔드 개발 공부

0개의 댓글