본문 바로가기
Server/Spring

회원관리 - 백엔드 개발) 2. 각각의 repository 메소드 테스트 하기

by print_soo 2024. 8. 24.

test폴더를 통해서 테스트를 해보자.

파일 경로: test/java/만든 파일명/repository/MemoryMemberRepositoryTest

 

[MemoryMemberRepositoryTest.java]

package section4.section4_spring.repository;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import section4.section4_spring.domain.Member;

import java.util.List;

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

class MemoryMemberRepositoryTest {
    MemoryMemberRepository repository = new MemoryMemberRepository();

    // 한개의 테스트가 끝날 때마다 데이터 혼란을 방지하기 위해 레포지토리를 지워주는 코드
    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에 담겨 있기 때문이다.
        System.out.println("result:" + (result == member));

        //위 처럼 출력결과를 보면서 테스트하기에는 비효율적이기 때문에 아래의 방법들을 사용

        Assertions.assertEquals(member, result);
        // 만약에 값이 true라면 녹색불 false라면 빨간불이 들어온다.

        assertThat(member).isEqualTo(result);
        // 위의 import static org.assertj.core.api.Assertions.*; 해당 코드를 사용해야한다. (요즘 많이 사용하는 테스트 방법)
    }


    @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(member1).isEqualTo(result);
    }


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

 

@Test를 사용하는 이유: 이 메서드가 테스트 코드임을 표시하기 위해 사용된다., 즉 테스트할 코드를 자동으로 실행하도록 해주는 마커라고 생각하면된다.

 

 

테스트 하나 씩 알아보자.

@Test
    public void save(){
        Member member = new Member();
        member.setName("spring");

        repository.save(member);

        Member result = repository.findById(member.getId()).get(); //get()을 하는 이유는 Optional에 담겨 있기 때문이다.
        System.out.println("result:" + (result == member));

        //위 처럼 출력결과를 보면서 테스트하기에는 비효율적이기 때문에 아래의 방법들을 사용

        Assertions.assertEquals(member, result);
        // 만약에 값이 true라면 녹색불 false라면 빨간불이 들어온다.

        assertThat(member).isEqualTo(result);
        // 위의 import static org.assertj.core.api.Assertions.*; 해당 코드를 사용해야한다. (요즘 많이 사용하는 테스트 방법)
    }

 

 

[작동 방식]

1. 멤버 객체를 만들고 회원을 임의로 입력해준다.
2. 해당 객체를 save 메소드로 저장소에 저장한다.
3. 만든 객체와 저장된 회원이 동일한지 확인한다.

 

 

테스트에는 총 3가지 방식이 있다.

System.out.println("result:" + (result == member));

-> 해당 방식은 바로 텍스트로 살펴볼 수 있어 확실하지만 일일히 텍스트로 확인하기 쉽지 않다는 단점이 있다.

 

Assertions.assertEquals(member, result);

-> 해당 방식은 간단하고 직관적이지만 복잡한 비교나 추가 조건을 작성하기 어렵다는 단점이 있다.

 

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

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(member1).isEqualTo(result);
}

 

[작동 방식]

1. 2개의 멤버 객체를 만들고 각각 다른 이름의 회원을 입력해준다.
2. 특정 이름으로 findByname을 통해 저장소에 해당 회원의 정보를 가져온다.
3. 특정 이름으로 된 객체의 정보와 회원의 정보를 비교해본다.

@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. 2개의 멤버 객체를 만들고 각각 다른 이름의 회원을 입력해준다.
2. 리스트에 저장소에 찾은 모든 데이터를 저장한다.
3. 만든 객체의 개수인 2와 리스트의 사이즈를 비교해본다.