[백엔드 첫 걸음] 회원 리포지토리 테스트 케이스 작성 - (회원 관리 예제)

khyojun·2022년 7월 18일
0

Spring 시작

목록 보기
8/15
post-thumbnail

1. 회원 리포지토리 메모리 구현체 테스트

📂 test/java/repository/MemoryMemberRepository.Test

package com.example.demo_practice.repository;

import com.example.demo_practice.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.util.List;

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

class MemoryMemberReposiotryTest {


    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(); // .get() optional안에 있는 객체를 꺼내오기.


        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);


        repository.findByName("spring1");
        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);

    }

}

알게 된 점

  1. @AfterEach : 한번에 여러 테스트를 진행하면 메모리 DB에 전에 있던 테스트 결과가 남아있을 수가 있다. 그래서 다음 테스트를 진행할때 실패할 경우가 잇는데 이를 방지하기 위하여서 작성하는 것이다.
    @AfterEach를 사용하게 되면 테스트가 종료될 때마다 이 기능을 실행을 한다. 그래서 안에 들어있는
    clearStore() ---> MemoryMemberRepository에 새로운 메소드를 만들어서 메모리 DB안의 데이터들을 다 삭제시키는 역할로 만들어놨다.

  2. @Test: Junit을 활용하여 Test하기위하여 작성한 annotation이다.

  1. 테스트를 위한 것을 구현 후 -> 구현 클래스들을 만드는 방법 : TDD방식

  2. Optional에는 Optional.get() 을 사용하면 Optional로 감싸져있는 객체를 꺼내올 수 있다.

  3. Assertj의 Assertion 과 Junit의 Assertion이 있는데 Assertj의 Assertion을 사용한 이유는 쉽게 말하자면은 assertThat을 활용할때 AssertJ는 간단하게 기댓값과 결과값만 넣으면 되지만 Junit은 검증대상과 로직을 비교한다는 측면에서 Assertj가 더 가독성이 좋다.
    정리하자면 Assertj를 사용하는 이유는 자동완성, Assertion분류, 확장성이 가장 큰 이유이다.

참고

김영한 - 스프링 입문 강의

profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글