대부분의 경우 프로젝트를 진행할 때 테스트 과정은 생략하는 경우가 많을 것입니다.(물론, 대학생들이 주로하는 소규모 프로젝트에서) 하지만, 테스트 과정은 에러를 조기에 발견할 수 있기 때문에 프로젝트를 진행함에 있어 필수적인 과정입니다.
저역시 테스트를 하는 방법을 모르고 있었기 때문에 무작정 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();
}