Backend/SpringBoot

테스트 코드 작성

Dean83 2024. 10. 29. 10:55

요즘은 모르겠는데 한때 TDD가 유행을 한적이 있다. 테스트케이스를 먼저 구현하고, 로직을 구현하는 방식이다.

나는 보통 테스트 코드를 작성하는걸 좋아하지 않는다. 그 이유는, 

  • 최대한 비지니스 로직에 맞추어 테스트 코드를 작성해야 한다. (같은일 2번 하는꼴)
    • 그렇다고 구현된 기능만 검증하는 간략한 테스트를 작성하면 테스트 하는 의미가 퇴색된다.
      • 저장, 입출력은 보통 잘 된다고 봐야하고, 안되면 개발 후 사람이 테스트 할때 바로 알아차릴 수 있다.
  • 테스트 코드를 통해 통과를 하더라도 실제 운영시 오류가 나는 경우가 많다.
    • 물론 오류 발생률을 사전에 줄여주지만 들이는 노력 및 시간 대비 비효율적이다.
  • 구현한 서비스를 실제 테스트 하는것을 더 신뢰한다.

 

하지만 백앤드의 경우 중요도가 높기도 하고, 클라이언트 와 다르게 테스트 하는것이 녹록치 않다.

(물론 포스트맨을 이용하여 실제 응답 테스트를 해볼 수 있다만..)

 

따라서 백앤드의 경우 빌드시 자동으로 테스트 코드를 돌릴 수 있도록 하는것도 좋을거 같단 생각에 정리를 한다. 

 

 

  • @SpringBootTest 어노테이션
    • 클래스에 어노테이션을 붙인다. 
    • 스프링부트가 실행되면서 테스트를 수행한다
    • 통합테스트 할 때 사용하고, 단위 테스트를 위해선 해당 어노테이션은 제거 한다.
  • @Test 어노테이션
    • src -> test 에 class 를 생성하여 테스트 코드를 작성한다
    • 테스트 함수에 @Test 어노테이션을 붙이면 빌드시 해당 함수를 돌린 후 빌드하게 된다.
  • Assert
    • C# 도 그렇고 자바도 그렇고 대게 비슷하게 Assert 를 사용하게 된다. 
    • isEqualTo 등 다양한 함수를 통해 값에 대한 검증을 할 수 있다. 
  • @AfterEach
    • 함수에 어노테이션을 붙인다. 
    • @Test 함수가 각각 실행 된 이후 이 어노테이션이 붙은 함수가 실행된다. 
    • 테스트 데이터 초기화 등 각 테스트들간 영향을 받지 않도록 코드를 작성한다
  • @Transactional 어노테이션
    • DB 접속을 하면서 테스트 진행시 테스트가 끝나면 DB 에 commit 하지 않고 롤백한다.
    • 클래스에 어노테이션을 붙인다