강의 기록/스프링 입문(김영한)

[스프링 입문] Section 3.회원 관리 예제: 회원 서비스 테스트

momong'-' 2021. 3. 16. 15:04

Section 3

  • 비즈니스 요구사항 정리
  • 회원 도메인과 리포지토리 만들기
  • 회원 리포지토리 테스트 케이스 작성
  • 회원 서비스 개발
  • 회원 서비스 테스트

회원 서비스 테스트

테스트시 기본적으로 만들 큰 틀을 짜놓고 하면 좋음. 필요에 따라 변경하면서 만들면 좋음.

// given(어떤 데이터가 주어졌을떄)
// when(언제)
// then (결과)

 

hello.hellospring.service

MemberServiceTest.java

package hello.hellospring.service;

import org.junit.jupiter.api.Test;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;

import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;

class MemberServiceTest {
	
	MemberService memberService;
	MemoryMemberRepository memberRepository;
	
	/**
	 * BeforeEach
	 * 각 테스트 실행 전에 호출된다. 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고,의존관계도 새로 맺어준다.
	 */
	@BeforeEach
	public void beforeEach() {
		memberRepository = new MemoryMemberRepository();
		memberService = new MemberService(memberRepository);
	}
	
	@AfterEach
	public void afterEach() {
		memberRepository.clearStore();
	}
	
	@Test
	public void 회원가입() {
		// 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
	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("이미 존재하는 회원입니다.");
		}
		 */
		IllegalStateException e = assertThrows(IllegalStateException.class,
				 () -> memberService.join(member2));//예외가 발생해야 한다
		
		// then
	}
	
}