강의 기록/스프링 입문(김영한)
[스프링 입문] 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): 테스트 주도 개발방법론
코드 작성 전에 테스트 코드 작성하는 방법