관리 메뉴

100세까지 코딩

[스트링 입문] 회원 리포지토리 테스트 케이스 작성 본문

백엔드/스프링 입문

[스트링 입문] 회원 리포지토리 테스트 케이스 작성

100세까지 코딩 2023. 12. 1. 18:01
 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

출처 : 김영한님의 스프링 입문

 테스트 케이스
package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.util.List;

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

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();
        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);
    }
}
afterEach
1. 테스트 메서드 실행 후에 무조건 실행한다.
2. 테스트 메서드는 순서를 보장할 수 없다. (서로 의존관계 없이 설계되어야 한다).
3. 하나의 테스트가 끝날 때마다 공용 데이터를 깔끔하게 지워야 한다.
4. clearStore로 데이터 깔끔하게 초기화한다.
JUnit의 assertThat VS assertj의 assertThat
1. 자동완성
2. Assertion 분류
3. 확장성 및 가독성 (메소드 체이닝)
이유로 요즘은 assertj의 assertThat을 많이 쓴다.
TDD
테스트 주도 개발 (Test Driven Development).
테스트 케이스를 먼저 만들고 통과할 수 있게 기능들을 만드는 것.