본문 바로가기
Back-End/Spring

Spring Boot Test Code 동작순서 정렬 - @TestMethodOrder

by 어렵다어려웡 2021. 6. 25.

최근 실무에서도 테스트코드의 중요성에 대해 알고 단위 테스트나 TDD 형식의 주도개발을 통해서

프로젝트를 구축하는 추세로 알고 있다.

 

지극히 주관적인 생각으로 테스트코드를 통해서 얻을수 있는 장점은 다음과 같다

 

1. 각각의 기능 테스트를 통한 검증.

2. 각 기능 테스트 검증에 의한 전체 프로젝트 구축시 기능동작에 대한 확신

 

정리해서 말하자면 테스트코드는 프로젝트가 구축되어 갈수록 해당 기능들이 전체적으로 정상적으로 동작해야 하기 때문에 그것에 대한 검증을 위한 행위이고 버그를 고치기 위한 원인을 파악하는 데 좀 더 편의성을 높이기 위한 것이라고

생각해볼 수 있다.

 

물론 테스트 코드를 작성해 나가면서 개발하는 것은 많은 시간과 인력(?)이 필요로 하지만

그만큼 테스트 코드가 있는 프로젝트가 좀 더 신경쓴 프로젝트라고 봐도 될것같다.

 

 본론으로..

 

서버에 배포를 할 때 나 Gradle 프로젝트를 빌드를 하게 되면 테스트코드를 실행하게되는데

이 때 테스트 클래스에 있는 메서드들을 순서있게 만들어서 사용하고 싶었다

이 때 사용하는 어노테이션이 @TestMethodOrder

 

@TestMethodOrder에는 이렇게 써있다

If @TestMethodOrder is not explicitly declared on a test class, 
inherited from a parent class, or declared on a test interface implemented by a test class, 
test methods will be ordered using a default algorithm that is deterministic but intentionally nonobvious.
Example Usage

정리하자면, 테스트 메서드들은 어떤 기본적인 알고리즘에 의해서 테스트 메서드가 진행된다고 한다.

 

그래서 이 어노테이션을 활용해서 테스트 메서드의 실행순서를 정할 수 있게 된다.

 

- @TestMethodOrder

1. MethodName

메서드명으로 오름차순 정렬 (a~ㄱ), 메소드명이 같다면 파라미터 타입명으로 오름차순 정렬

 

2. DisplayName

- @DisplayName의 값으로 오름차순 정렬

 

3. OrderAnnotation

- @Order(n) 어노테이션으로 순서를 정하는 방법

 

4. Random

-랜덤으로 순서를 정하는 방법

 

- OrderAnnotation 예제코드

나머지 방법은 선언만 해주면 되지만 OrderAnnotation 방법으로 사용할 경우

메서드에 @Order(값) 을 선언하여 해당 메서드의 실행 순서를 지정해서 써야한다.

@SpringBootTest
@Log4j2
@Transactional
@TestMethodOrder(value = MethodOrderer.OrderAnnotation.class)
public class LikeRepositoryTests {

    @DisplayName("좋아요 추가")
    @Test
    @Commit
    @Order(1)
    public void addLikeTest() {

    }

    @DisplayName("좋아요 찾기")
    @Test
    @Order(2)
    public void findByMemberAndItemTest() {
  
    }

    @DisplayName("좋아요 삭제(취소)")
    @Test
    @Commit
    @Order(3)
    public void cancelLikeTest() {

    }

}