<aside>
😎 백엔드의 Git, test 등 그 외의 컨벤션을 기록한 페이지입니다. (24.01.17 최신화)
</aside>
🍷 test convention (24.1.20 최신화)
- 가장 작은 단위부터 테스트한다.
- 테스트 코드 위치는 테스트 대상과 같은 패키지에 둔다.
- Fixture Monkey를 최대한 활용한다.
- 하위 계층에서 테스트가 이루어진 코드는 Mocking한다.
- 쿼리 관련 테스트는 반드시 테스트를 작성한다.
- Naming, 네이밍
@DisplayName
: 구체적인 경과를 표현한다.
- method name : 테스트대상_결과_원인or예상데이터
- ex. 상품 생성 테스트
구분 |
@DisplayName |
Method |
성공 |
상품 생성 요청이 들어오면 데이터가 기본 상태로 저장된다. |
createProduct_Success_WithNormalState |
실패 |
존재하지 않는 카테고리로 생성 요청을 하면 예외를 던진다. |
createProduct_Fail_ByNotExistCategory |
Name |
Discription |
MonkeySupport |
Fixture Monkey만 지원하는 Abstract Class. |
sut 로 Monkey에 접근한다. |
|
WebMvcTestSupport |
Mock Controller 테스트를 지원하는 Abstract Class. |
Context가 여러번 올라오지 않도록 Bean들을 Caching. |
|
보안 대상인 URI는 @ApiTest 를 사용해야 한다. |
|
MockTestSupport |
Monkey와 Mockito를 지원하는 Abstract Class. |
JpaTestSupport |
Jpa를 테스트를 지원하는 Abstract Class. |
Monkey도 지원한다. |
|
Name |
Discription |
@ApiTest |
Security을 위한 Controller 테스트용 Annotation. |
ApiTestSecurityContextFactory 를 사용해서 가짜 유저를 생성한다. |
|
@RedisBasedTest |
Embedded Redis가 적용된 통합 테스트. |
테스트는 클래스마다 랜덤한 포트에서 동작한다. |
|
@OpenFeignTest |
Feign 설정이 적용된 통합 테스트 |
🍷 package convention
- 각 도메인 별로 모듈을 구분한다.
- 패키지 구조
# Layerd (Old, 240313 modified)
root
├── global
├── infra
└── module
├── plan
├── ...
└── user
├── presentation
├── application
├── dto
└── domain (Repository는 같이 위치한다)
# Hexagon (New)
root
├── global
├── infra
└── module
├── plan
├── ...
└── user
├── adapter
│ ├── in
│ ├── ...
│ │ └── web (package-private)
│ └── out
│ ├── ...
│ └── persistence (package-private)
├── application
│ ├── service (package-private)
│ └── port
│ ├── in (public)
│ └── out (public)
├── domain
└── mapper
🍷 git message convention
태그 |
명세 |
Add |
새로운 기능 추가 (기능이 추가될 때 테스트 코드 작성 필수) |
Update |
구현된 기능 수정 |
Refactor |
구현된 기능 리팩토링 (동일한 Input & Output) |
Docs |
애플리케이션 문서 수정 |
Test |
추가적인 테스트 반영 |
Delete |
클래스, 파일 삭제 |
Fix |
버그 수정 |
Chore |
빌드 업무 수정, 의존성 추가 & 수정, 패키지 이동, 실제 코드 변경 없음 |
Rename |
클래스, 메서드, 변수 이름 변경 |