테스트 코드

  • 개발자가 작성한 코드가 의도한 대로 동작하는 지 확인하기 위해 작성하는 코드
  • 코드의 품질, 안정성을 유지

왜 테스트코드를 작성하는가?

  • 변경한 코드가 기존 기능이 제대로 동작하는지 보장하는 안전장치 👷
  • 문서화 효과 (테스트 코드)
  • 코드 품질 향상
  • 안정적인 배포
  • 코드의 복잡성과 요구사항에 맞춰서 커버리지 설정 (100%일수는 없다)
  • 비즈니스 로직에서 핵심적인 부분은 테스트 코드 작성
  • 자주 변경되는 코드는 테스트코드를 기준으로 개발

CI/CD Pipeline

  • 개발, 테스트, 배포 단계를 자동화한 워크 플로우
  • CI : 코드를 정기적으로 통합, 변경사항에 대해 자동화된 테스트 실행
  • CD : 통합된 코드 자동 배포
  • 자동화된 테스트 실행 (유닛, 통합 테스트)

테스트 방식 : TDD와 BDD

TDD = Test Driven Development

  • 개발자 관점
  • 유닛 테스트 중심
  • 테스트 우선 개발 테스트 실패 기능 개발 테스트 통과

BDD = Behavior Driven Development

  • 시나리오 기반 테스트
  • 비즈니스 요구사항 중심
  • 서비스 최종 검증

테스트의 종류

유닛 테스트 Unit Test

  • 작은 단위의 테스트
  • JUnit, Spock, Mockito

통합 테스트 Integration Test

  • 모듈간의 연동 테스트
  • Repository, Service 등의 모듈이 제대로 동작하는지 검증
  • 캐싱이 제대로 동작하는지 테스트
  • SpringTest(@SpringBootTest, @MockBean), TestContainers

계약 테스트 Contract Test

  • MSA 끼리의 API 계약이 올바르게 유지되고 있는지 확인
    • FeignClient로 통신하는 부분들이 변경되지 않았는지 확인
  • Pact, Spring Cloud Contract

End-to-End 테스트

  • 시스템 전체가 통합된 방식으로 동작하는지 확인하는 테스트
  • 시나리오 흐름이 정상동작하는지 확인
  • Selenium, Cypress, Postman Colleciton

성능 테스트

  • 응답시간, 처리속도, 시스템 리소스 사용량 등을 기반으로 어플리케이션 성능 테스트
  • 대규모 트래픽, 부하상황에서의 어플리케이션 성능 측정
  • JMeter, Gatling, nGrinder
  • 개발 코드 단위 작동, 로직 오류 → 유닛 테스트
  • MSA 내부 기능 동작 확인 → 통합 테스트
  • MSA 간 API 통신 일관성 확인 → 계약 테스트
  • 시나리오 기반 서비스 전체 테스트 → End to End 테스트
  • 서비스의 성능 확인 → 성능 테스트

테스트 코드 커버리지 추출 JaCoCo

JaCoCo란?

  • Java Code Coverage
  • 코드 커버리지 오픈 소스 라이브러리

주요 기능

  • 라인 커버리지: 테스트가 어떤 코드 라인을 실행했는지를 확인
  • 분기 커버리지: 조건문에서 각 분기가 실행되었는지를 확인
  • 메소드 및 클래스 커버리지: 각 메소드와 클래스가 얼마나 테스트되었는지 확인
  • 리포트 제공: 코드 커버리지 결과를 분석할 수 있는 리포트를 제공