본문 바로가기
개발/SpringBoot

[springboot] test case @Aftereach 어노테이션

by yo.na 2022. 12. 18.

test case 작성 시 이전에 저장 된 값 때문에 오류가 생길 때가 있습니다.
test case 는 순서에 의존되지 않아야 하기 때문에 순서와 상관없이 test 가 성공해야 하는데
이럴 때 사용하는 @Aftereach 에 대해서 알아보겠습니다!
이건 몰랐던 내용인데 이번에 강의 들으면서 알게되어 정리하게 됐습니다 ㅎㅎ

 

✔ 개념

@Aftereach 어노테이션이 명시된 메서드는 테스트 메서드 하나 실행 후 반드시 실행됩니다.

test case는 독립적으로 수행되어야 합니다.

✔사용방법

아래의 Test case 들은 하나씩 실행하면 모두 성공하지만, Class 레벨에서 한번에 실행하면 오류가 생깁니다.

이유는 findAll 메서드가 먼저 실행되어 값이 먼저 저장되면서 findByName 메서드가 실패하게 되기 때문인데요,

순서와 관계없이 test를 성공시키기 위해서 @Aftereach 어노테이션을 사용합니다.

 

1. @Aftereach 사용 전

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

    repository.save(member);

    Member result = repository.findById(member.getId()).get();
    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("spring2").get();

    Assertions.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();
    Assertions.assertThat(result.size()).isEqualTo(2);
}

2. @Aftereach 사용 후

먼저, main 폴더의 메서드에 아래의 코드를 작성해줍니다.

public void clearStore() {
    store.clear();  // store 비우기
}

그 다음 이전에 실패했던 test case 메서드들이 있는 곳에 아래의 코드를 입력해줍니다.

@AfterEach
public void afterEach() {   // 테스트 한개 실행 시 repository 비움.
    repository.clearStore();
}

이렇게 작성해두면 하나의 테스트 메서드가 끝날 때 마다 respository 를 비워주는 afterEach 메서드가

실행되어 이전에 발생했던 오류를 없애고 성공적으로 test case 를 실행할 수 있게 됩니다.

 

✔참고

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com