ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Springboot] 테스트 코드 작성
    개발공부/Web 2023. 5. 29. 22:53

     

    public interface MemberRepository {
    Member save(Member member);
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();
    }

     

    Member라는 객체를 저장할 수 있는 MemberRepository라는 객체를 만들고 그 작동을 테스트 하려고 한다. 

    MemberRepository의 인터페이스는 위와 같이

    • 새 멤버를 저장할 수 있는 save
    • 멤버를 아이디별로 찾을 수 있는 findById
    • 멤버를 이름별로 찾을 수 있는 findByName
    • 모든 멤버들의 리스트를 반환하는 findAll

    로 이루어진다.

     

    여기서 Member를 domain, MemberRepository를 repository라고 한다. 스프링의 웹 mvc 구조는 controller, service, domain, repository로 이루어진다. controller는 맨 윗단에서 요청을 처리하고 service는 핵심 비즈니스 로직을 구현하는 곳이라고 한다.

     

    아무튼 이런 것들을 다 만들고 테스트를 하려면 테스트 코드를 작성해야 한다.

     

    MemoryMemberRepositoryTest.java

     

    package com.example.demo.repository;

    import com.example.demo.domain.Member;
    import org.junit.jupiter.api.AfterEach;
    import org.junit.jupiter.api.Assertions;
    import org.junit.jupiter.api.Test;

    import java.util.List;

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

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

     

    save, findByName, findAll 모두 동명의 기능을 테스트하기 위한 테스트 함수이고 그 안에 작성한 코드도 간단하게 동작을 시험할 수 있는 코드이다. 여기서 특이한 것은 @AfterEach annotation이 붙은 afterEach 함수인데, 이 함수 없이 전체 테스트 코드를 돌리면 의도한 것처럼 모든 테스트가 통과되지 않고 findByName에서 에러가 난다. repository가 매 테스트 함수 실행 전에 초기화가 안되기 때문. aftereach를 저렇게 구현해 놓으면 각 함수를 실행하기 전에 repository가 초기화가 된다. (clearStore도 미리 구현해놓은 초기화함수.)

    '개발공부 > Web' 카테고리의 다른 글

    [Three.js] Geometry  (0) 2023.04.03
    [Three.js] Transform  (0) 2023.03.29
    [Three.js] 개발 보조 도구  (0) 2023.03.20
    [Three.js] 애니메이션  (0) 2023.03.18
    [Three.js] 기본 요소 익히기  (0) 2023.03.06
Designed by Tistory.