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

[스프링 입문] Section 3.회원 관리 예제: 회원 리포지토리 테스트 케이스 작성

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

Section 3

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

 

테스트 케이스 작성

hello.hellospring.repository

MemoryMemberRepository.java

메소드 코드 추가

package hello.hellospring.repository;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import org.springframework.stereotype.Repository;

import hello.hellospring.domain.Member;

/**
 * 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려
 */
public class MemoryMemberRepository implements MemberRepository {


	public void clearStore() {
		store.clear();
	}
}

 

테스트 케이스 작성

hello.hellospring.repository

MemoryMemberReository.java

package hello.hellospring.repository;

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

import java.util.List;

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

import hello.hellospring.domain.Member;

public class MemoryMemberRepositoryTest {
	/*
	* test 순서 보장 안됨. 전체 돌리면 findByName 오류 (spring1, spring2가 겹쳐 문제 발생)=> data clear
	*/
	MemoryMemberRepository repository = new MemoryMemberRepository();
	
	/**
	 * AfterEach: 메소드 동작이 끝날때 호출되는 메소드
	 */
	@AfterEach
	public void afterEach() {
		repository.clearStore();
	}
	
	@Test
	public void save() {
		Member member = new Member();
		member.setName("spring");
		repository.save(member);
		
		Member result = repository.findById(member.getId()).get();
		
		//System.out.println("result = " + (result == member));
		
		/**
		 * Test 1
		 * import org.junit.jupiter.api.Assertions
		 */
		// success test
		//Assertions.assertEquals(result, member);
		
		// fail test
		//Assertions.assertEquals(result, null); // 빨간 불
		
		
		/**
		 * Test 2
		 * import org.assertj.core.api.Assertions
		 */
		// success test
		//Assertions.assertThat(member).isEqualTo(result);
		
		
		/**
		 * Test 3
		 * import static org.assertj.core.api.Assertions.*;
		 */
		//suceess test
		assertThat(member).isEqualTo(result);
		// fail test
		//assertThat(member).isEqualTo(null);
	}
	
	@Test
	public void findByName() {
		Member member1 = new Member();
		member1.setName("spring1");
		repository.save(member1);

		Member member2 = new Member();
		member2.setName("spring2");
		repository.save(member2);
		
		Member result = repository.findByName("spring1").get();
		
		// fail test
		//Member result = repository.findByName("spring2").get();
		
		assertThat(result).isEqualTo(member1);
	}
	
	@Test
	public void findAll() {
		Member member1 = new Member();
		member1.setName("spring1");
		repository.save(member1);
		
		Member member2 = new Member();
		member2.setName("spring1");
		repository.save(member2);
		
		List<Member> result = repository.findAll();
		
		assertThat(result.size()).isEqualTo(2);
		
		// fail test
		//assertThat(result.size()).isEqualTo(3);
		
	}
}

 


TDD(Test-driven Development): 테스트 주도 개발방법론

코드 작성 전에 테스트 코드 작성하는 방법