Lettering-Backend는 모듈화된 아키텍처를 사용하는 Kotlin 기반 백엔드 프로젝트입니다. 이 프로젝트는 다음과 같은 모듈로 구성되어 있습니다:
- Application-Module: 비즈니스 로직과 유스케이스를 포함합니다.
- Bootstrap-Module: 애플리케이션의 진입점과 API 엔드포인트를 정의합니다.
- Common-Module: 공통 유틸리티와 기능을 제공합니다.
- Domain-Module: 도메인 엔티티와 비즈니스 규칙을 정의합니다.
- Infrastructure-Module: 외부 시스템과의 통합을 담당합니다.
- AWS: AWS 서비스 통합
- Client: 외부 API 클라이언트
- Event: 이벤트 처리
- Persistence: 데이터 저장소 관련 코드
- Security: 인증 및 권한 부여
-
모킹을 기본으로 슬라이스 테스트를 진행한다.
- 각 서비스나 컴포넌트는 독립적으로 테스트되어야 합니다.
- 외부 의존성은 mockk를 사용하여 모킹해야 합니다.
- 테스트는 특정 기능 단위(슬라이스)에 집중해야 합니다.
-
kotest를 활용한 테스트 검증을 진행해야한다.
- 모든 테스트는 kotest 프레임워크를 사용하여 작성해야 합니다.
- BehaviorSpec 스타일(given/when/then)을 사용하여 테스트를 구조화합니다.
- kotest의 assertion 라이브러리(shouldBe, shouldNotBeNull 등)를 사용하여 결과를 검증합니다.
-
테스트 클래스 구조
- 테스트 클래스는 테스트 대상 클래스 이름에 'Test'를 붙여 명명합니다. (예:
SocialLoginServiceTest) - BehaviorSpec을 상속받아 테스트를 구현합니다.
- 테스트 클래스는 테스트 대상 클래스 이름에 'Test'를 붙여 명명합니다. (예:
-
모킹 방법
- mockk 라이브러리를 사용하여 의존성을 모킹합니다.
mockk<Interface>()형태로 모의 객체를 생성합니다.every { ... } returns ...구문을 사용하여 모의 객체의 동작을 정의합니다.- 필요한 경우
verify { ... }구문을 사용하여 모의 객체의 메서드 호출을 검증합니다.
-
테스트 시나리오 작성
- given: 테스트 전제 조건을 설정합니다.
- when: 테스트할 동작을 실행합니다.
- then: 결과를 검증합니다.
- 테스트 설명은 한글로 작성하여 가독성을 높입니다.
-
예외 테스트
shouldThrow<ExceptionType> { ... }구문을 사용하여 예외 발생을 검증합니다.
- 개별 테스트는 독립적으로 실행 가능해야 합니다.
- 테스트 간 의존성이 없어야 합니다.
- 테스트는 빠르게 실행되어야 합니다.
- 테스트 코드도 프로덕션 코드와 동일한 품질 기준을 적용합니다.
- 테스트 코드는 명확하고 이해하기 쉽게 작성해야 합니다.
- 중복 코드는 적절한 헬퍼 메서드나 픽스처를 사용하여 제거합니다.