Member Repository 클래스를 만들고, 변수와 메서드를 구현했다.
해당 클래스가 잘 만들었는지 테스트를 해보기 위해서, 테스트 케이스를 만들어 실행해보자.
1. MemoryMemberRepository 클래스 구현
먼저, 클래스를 구현해야한다. Member에 관한 정보들을 담아 두는 클래스를 만들어 보자.
MemoryMemberRepository
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream().filter(member -> member.getName().equals(name)).findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
}
}
2. 테스트 케이스 작성
1) test에다가 repository를 추가해서 MemoryMemberRepositoryTest 클래스를 추가
2) 테스트 케이스를 작성해본다. (임포트는 생락했습니다.)
테스트가 필요한 메서드는 @Test 어노테이션을 붙어서 작성하도록 합니다. 다양한 테스트 케이스들을 main함수가 아닌 곳에서 쉽게 테스트할 수 있는게 큰 장점이다.
MemoryMemberRepositoryTest
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@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));
// Assertions.assertEquals(member, result);
assertThat(member).isEqualTo(result);
}
@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();
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll() {
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(2);
}
}
assertThat으로 해당 메서드가 잘 돌아가는지 확인할 수 있다. 물론, assertThat을 사용하기 위해서 Assertions 을 임포트했다.
@AfterEach 는 모든 테스트가 끝나고 실행되는 콜백함수라고 보면된다. 테스트 케이스는 순서대로 작동되지 않기 때문에, 다른 테스트 케이스에 영향을 줄수 있다. 그래서 @AfterEach 를 사용해서 store에 있는 것들을 Clear 하도록 구현했다.
3) 정상적으로 돌아가면 초록색 체크 표시 (비정상 케이스를 돌리면 엑스 표시)
3-1) 정상
3-2) 실패
'Back-end > Spring' 카테고리의 다른 글
혼자만의 스프링 부트 특징 일기 (0) | 2021.11.08 |
---|---|
[InelliJ] 클래스에서 테스트 만들기 단축키 (0) | 2021.11.01 |
[Spring] 스프링 개발 기초 (0) | 2021.10.26 |
[Spring] gradle 빌드, jar 실행하는 방법 (0) | 2021.10.25 |
[Spring Boot] 윈도우에서 실행중인 jar 종료 (0) | 2021.10.24 |