[SPRING] 테스트를 시작해보자

wannabeing·2025년 4월 26일
0

SPRING

목록 보기
10/12
post-thumbnail

❓ 테스트를 "꼭" 해야할까요?

  • 예측 불가능한 사용자 행동: 실제 사용자들은 우리가 예상하지 못한 입력이나 상황을 유발할 수 있다.
  • 복잡한 비즈니스 로직: 조건 분기가 많은 로직은 예상치 못한 오류를 일으킬 수 있기 때문이다.
  • 변경과 확장: 새로운 기능 추가나 리팩토링 과정에서 기존 기능이 망가질 수 있으며, 이를 사전에 방지하려면 안정적인 테스트가 필요하다.

테스트를 통해 신뢰성을 확보할 수 있으며,
이는 곧 제품 품질 향상과 유지보수 비용 절감으로 이어진다!


🥊 단위 테스트와 통합 테스트

  • 단위 테스트(Unit Test)
    • 특징: 작은 단위(클래스, 메서드, 함수)의 로직을 독립적으로 검증
    • 장점: 실행 속도가 빠르고, 문제 발생 지점을 정확히 파악 가능
    • 예시: 비즈니스 로직 함수 하나를 외부 의존성 없이 검증하기
  • 통합 테스트(Integration Test)
    • 특징: 여러 모듈이 함께 작동하는 과정에서 문제가 없는지 확인
    • 장점: 실제 환경과 유사하게 동작하므로 배포 전 전체 흐름 검증 가능
    • 예시: DB와 연동, API 서버 호출, 여러 계층조합 검증
  1. 단위 테스트를 통해 코드 품질을 관리하고,
    통합 테스트를 통해 전체 시스템의 안정성을 확보한다.

  2. 단위 테스트는 빠르고 자주 실행할 수 있으며,
    통합 테스트는 시스템 전체를 검증하는 식으로 활용한다!


❓ TDD와 BDD가 뭔가요?

  • TDD (테스트 주도 개발)
    • 성공/실패 케이스를 만들고, 코드를 작성하는 것이다.
    • 개념: Test → Code(최소한의 코드) → Refactor(코드 개선)
    • 효과: 기능 구현 이전에 테스트를 작성함으로써, 구현 대상과 범위를 명확하게 정의하고, 불필요한 로직을 만들지 않게 도와준다.
  • BDD (행위 주도 개발)
    • 비개발자도 이해할 수 있도록 코드를 작성하는 것이다.
    • 개념: 사용자(또는 비즈니스)의 행위에 초점을 맞추어
      Given-When-Then 형태로 테스트 시나리오 작성
    • 효과: 모두가 이해하기 쉬운 시나리오로 테스트를 기술하므로,
      커뮤니케이션 비용 감소 및 요구사항 명확화.

✅ 테스트 라이브러리 올인원

testImplementation 'org.springframework.boot:spring-boot-starter-test'

해당 라이브러리 안에 JUnit5, AssertJ 모두 들어가있다.


📁 @DisplayName 맛있게 사용하는 법

@DisplayName은 가독성 좋게 적어주는 것이 좋다고 한다.

  • 문장형태로 작성하기
  • 섬세하게 작성하기

Settings - Build~ - Gradle - Run tests using 부분을
IntelliJ IDEA로 변경하면 아래와 같이 더욱 편하게 테스트를 확인할 수 있다.

📁 테스트 템플릿 만들기!

1. Settings - Editor - Live Templates

2. 템플릿 명령어 설정 및 템플릿 작성

Settings - Editor - Live Templates - Java에서 +

Java 탭에서 +버튼을 사용하여 Template text
아래와 같이 적어두면 테스트 템플릿을 쉽게 작성할 수 있다.

@org.junit.jupiter.api.DisplayName("")
@org.junit.jupiter.api.Test
void test() {
    // given
    
    // when
    
    // then
}

3. 권한 설정

Change버튼을 통해 Java코드에서 활성화되게 해준다.

4. 템플릿 생성

이제 test라는 명령어를 통해 템플릿을 사용할 수 있게 되었다.
이제 테스트 코드 작성하러 가보자..


출처

내배캠 특강 세션
구글링

profile
wannabe---ing

0개의 댓글