테스트

Jongwon·2022년 2월 28일
0

Java/Spring

목록 보기
4/12

대부분의 경우 프로젝트를 진행할 때 테스트 과정은 생략하는 경우가 많을 것입니다.(물론, 대학생들이 주로하는 소규모 프로젝트에서) 하지만, 테스트 과정은 에러를 조기에 발견할 수 있기 때문에 프로젝트를 진행함에 있어 필수적인 과정입니다.

저역시 테스트를 하는 방법을 모르고 있었기 때문에 무작정 println을 통해 출력해보거나 과정을 생략했었는데, 이번에 김영한님의 스프링 강의를 통해 스프링에서 제공하는 테스트로 쉽게 할 수 있었음을 알게 되었습니다.



테스트

각각의 테스트 케이스는 다른 테스트와 독립적이어야 합니다. 하지만, 테스트 클래스에 전역변수를 생성한다면, 오류가 날 가능성이 많습니다. 일단 IntelliJ에서는 @Test라는 테스트를 위한 Annotation을 제공합니다.

@Test
MemoryMemberRepository repository = new MemoryMemberRepository();

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

    repository.save(member);
    Member result = repository.findById(member.getId()).get();

    assertEquals(member, result);
    assertThat(member).isEqualTo(result);
}

이때, repository는 테스트 클래스에서 선언한 전역변수인데, 아래의 테스트에서도 사용되고 있습니다.

@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 테스트를 통해 저장된 데이터가 findAll 테스트에서 확인될 수 있기 때문에 테스트 간의 독립성을 위해 초기화가 진행되어야 합니다. @AfterEach Annotation을 이용한다면, 각 테스트를 마친 후 IntelliJ가 자동으로 @AfterEach에 해당하는 메서드를 호출한 뒤, 다음 메서드를 실행합니다.

@AfterEach
public void afterEach() {
    repository.clearStore();
}
profile
Backend Engineer

0개의 댓글