테스트 케이스 작성

현민·2022년 1월 3일
0

스프링 공부

목록 보기
2/9

인프런 김영한님의 스프링 강의를 듣고 정리한 내용입니다. 출처


테스트 케이스 작성

개발한 기능을 테스트할때 main메서드를 통해 실행하거나 웹 애플리케이션의 컨트롤러를 통해 실행하게되면, 준비하고 실행하는데 오래 걸리고 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다.
jUnit이라는 프레임워크로 테스트를 실행해서 문제를 해결할수있다.

테스트코드는 src/test/java하위 폴더에 생성한다.

예제

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.*;

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 member = new Member();
        member.setName("spring1");
        repository.save(member);

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        Member result = repository.findByName("spring2").get();
        assertThat(result).isEqualTo(member2);

    }

    @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를 작성해주면 된다.

  • 한번에 여러 테스트를 실행하게되면 메모리 DB에 직전 테스트의 결과가 남아서 다음 테스트에 영향을 줄 수있다.
    @AfterEach를 사용하면 각 테스트가 종료될때마다 이 기능을 실행하게된다.
    여기서 저장된 데이터를 지워주게되면 각 테스트를 독립적으로 실행할수있다.

  • 테스트 결과를 확인할때는 콘솔로 직접 출력해보거나,
    Assertions.assertEquals(기댓값, 실제값)
    Assertions.assertThat()
    을 사용하며, 보통 assertThat을 사용한다.

2022-01-05 추가

  • @SpringBootTest를 사용하면 스프링 컨테이너와 테스트를 함께 실행한다.

  • @Transactional을 사용하면 테스트 시작 전에 트랜잭션을 시작하고 테스트 완료 후에 항상 롤백해주기 때문에 다음 테스트에 영향을 주지 않는다.

0개의 댓글