본문 바로가기
Java/Spring입문

[Spring입문 - Eclipse(2)] 백엔드 개발 - 회원 관리 예제(테스트포함)

by 이쟝 2022. 11. 30.

2022.03.09 - [Java/Spring입문] - Spring 입문(6) 회원관리 예제 - 백엔드 개발-1(테스트케이스작성까지)

2022.03.10 - [Java/Spring입문] - Spring 입문(7) 회원관리 예제 - 백엔드 개발-2

 

1. 회원 도메인과 레포지토리 만들기

클래스 의존 관계

 

  • domain -> Member.java(VO): 변수와 Getter Setter
  • repository -> MemberRepository Interface , MemoryMemberRepository implements MemberRepository


2. 테스트 케이스 작성하기

src/test/java에 repository 패키지 생성 뒤 MemoryMemberRepositoryTest 클래스 파일 생성

ctrl+f11로 실행하기!

result가 기대한 결과값일 때!

result가 null 일 때! 

 

package com.example.inflearn_spring.repository;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;

import com.example.inflearn_spring.domain.Member;

class MemoryMemberRepositoryTest {
	
	MemoryMemberRepository repository = new MemoryMemberRepository();
	
	@Test
	public void save() {
		Member member = new Member();
		member.setName("spring");
		
		repository.save(member);
		
		Member result = repository.findById(member.getId()).get();
		assertThat(member).isEqualTo(result); //Assertions.assertEquals(member, result);
	}
	
}

Assertions.assertEquals(member, result) 대신에 assertThat(member).isEqualTo(result)로 할 수 있다. 대신에  import static org.assertj.core.api.Assertions.assertThat을 import 해줘야 한다!

Test 전체 코드

package com.example.inflearn_spring.repository;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;

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

import com.example.inflearn_spring.domain.Member;

class MemoryMemberRepositoryTest {
	
	MemoryMemberRepository repository = new MemoryMemberRepository();
	
	@Test
	public void save() {
		Member member = new Member();
		member.setName("spring");
		
		repository.save(member);
		
		Member result = repository.findById(member.getId()).get();
		assertThat(member).isEqualTo(result); //Assertions.assertEquals(member, result);
	}
	
	@Test
	public void findByName() {
		Member member1 = new Member();
		member1.setName("test1");
		repository.save(member1);
		
		Member member2 = new Member();
		member2.setName("test2");
		repository.save(member2);
		
		Member result = repository.findByName("test1").get();
		assertThat(result).isEqualTo(member1);
	}
	
	@Test
	public void findAll() {
		Member member1 = new Member();
		member1.setName("test1");
		repository.save(member1);
		
		Member member2 = new Member();
		member2.setName("test2");
		repository.save(member2);
		
		List<Member> result = repository.findAll();
		
		assertThat(result.size()).isEqualTo(2);
	}
	
    // 한 메서드를 Test하고 나서 그 다음 메서드를 실행하기 전에 데이터 삭제!
	@AfterEach
	public void afterEach() {
		repository.clearStore();
	}

한 메서드가 테스트에 실패했으면 이렇게 밑처럼 된다.


3. 회원 서비스 개발

src/main/java에 service 패키지 만든 후 MemberService 클래스 생성

회원가입(join), 전체 회원 조회(findMembers), id로 한 회원만 조회(findOne)하는 메서드 생성

4. 회원 서비스 테스트

테스트하려는 파일을 클릭 -> New -> JUnit Test Case를 하게 되면 간편하게 테스트 파일 생성 가능!

Join (given -> when -> then)을 따라서!

@Test
void Join() {
    // 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());
}

예외가 더 중요함! (1)번은 Try Catch문으로 비교 (2)번은 IllegalStateException.class가 실행될때로(NullpointExceptio을 넣으면 fail) (3)번은 IllegalStateException message로 비교

@Test 
void 중복회원예외() {
    Member member1 = new Member();
    member1.setName("spring");

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

    memberService.join(member1);

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

//  (2) assertThrows
//	assertThrows(IllegalStateException.class, ()-> memberService.join(member2));

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

}