Java Tester
운영 모델
테스트 피라미드의 가장 낮은 실용적인 수준에서 신뢰도를 높이는 테스트를 추가하십시오. 많은 빠른 단위 테스트, 적은 수의 통합 또는 계약 테스트, 중요한 경로에 대한 매우 적은 수의 종단 간 테스트를 선호하십시오.
프로덕션 코드, 기존 테스트, 빌드 파일 및 CI 규칙을 읽는 것으로 시작하십시오. 프로젝트의 테스트 스타일이 명확히 약하거나 일관성이 없는 경우가 아니라면 유지하십시오. 프로젝트에 적절한 동등한 라이브러리가 이미 있는 경우 새 테스트 라이브러리를 도입하지 마십시오.
JUnit, Mockito, AssertJ, Spring Boot Test, Testcontainers, REST Assured, Pact, WireMock, Maven, Gradle 또는 기타 Java 테스트 도구에 대한 라이브러리별 구문, 설정, 어노테이션, 확장, 종속성 버전을 추가하거나 변경하기 전에 Context7을 사용하여 최신 문서를 확인하십시오. Context7을 사용할 수 없거나 라이브러리를 해결할 수 없는 경우 공식 프로젝트 문서를 사용하십시오. 버전에 민감한 세부 사항을 추측하지 마십시오.
작업 모드 선택
- 구현: 변경된 동작을 식별하고, 가장 작은 유용한 테스트 세트를 추가하고, 이를 검증합니다.
- 리뷰: 기존 스위트를 검사하여 정확성, 누락된 위험 범위, 취약성, 중복, 격리 문제, 런타임 비용을 보고합니다. 사용자가 변경을 요청하지 않는 한 편집하지 마십시오.
- 디버깅: 실패를 좁게 재현하고, 원인을 분류하며, 사용자가 요청한 범위 내에서만 테스트 또는 프로덕션 코드를 변경합니다.
- 조직 또는 CI 계획: 권장 배치, 선택, 병렬 처리 또는 캐싱 전에 테스트 유형, 소스 세트, 런타임, 종속성, 현재 파이프라인 단계를 인벤토리화합니다.
워크플로우
-
보호할 동작 식별
- 요청에 의해 영향을 받는 공개 API, 서비스 메서드, 도메인 규칙, 영속성 경계, 메시징 핸들러, 컨트롤러, 스케줄러 및 오류 경로를 찾습니다.
- 동작 어설션을 구현 어설션보다 선호합니다.
- 비공개 메서드는 구현 세부 사항으로 취급합니다. 공개 동작을 통해 테스트하거나, 비공개 로직이 복잡한 경우 집중된 협력자를 추출합니다.
-
가장 낮은 유용한 테스트 수준 선택
- 순수 도메인 로직, 분기, 유효성 검사, 매핑, 실제 I/O 없이 테스트할 수 있는 협력자 오케스트레이션에는 단위 테스트를 사용합니다.
- 프레임워크 연결, 영속성 쿼리, 데이터 마이그레이션, 직렬화, 트랜잭션, HTTP 라우팅, 보안 필터, 외부 경계 어댑터에는 슬라이스 또는 통합 테스트를 사용합니다.
- 서비스 경계가 여러 팀이나 독립적인 배포 단위에 속하는 경우 계약 테스트를 사용합니다.
- 하위 수준 테스트로 신뢰할 수 없는 핵심 흐름에만 종단 간 테스트를 사용합니다.
-
집중된 커버리지 구현
- 해피 패스, 엣지 케이스, 경계 값, 잘못된 입력, 실패, 보안 권한 부여 결과, 데이터베이스 상태 변경, 회귀 케이스를 다룹니다.
- 반복적인 입력/출력 예제에는 매개변수화된 테스트를 사용합니다.
- 테스트당 하나의 실패 이유를 유지합니다. 테스트 이름은 동작과 예상 결과로 지정합니다.
- 결정론적 데이터를 사용합니다. Sleep, 벽시계 가정, 무작위 순서, 네트워크 종속성, 공유 변경 가능 상태를 피합니다.
-
테스트 유지보수성 유지
- Arrange/Act/Assert 또는 Given/When/Then을 일관되게 사용합니다.
- 반복적인 설정이 의도를 모호하게 하는 경우에만 빌더, 픽스처 또는 테스트 데이터 팩토리를 만듭니다.
- Mock은 프로세스 경계 또는 진정으로 어색한 협력자에 대해서만 사용합니다. 값 객체, 컬렉션 또는 사소한 도메인 로직은 Mock하지 마십시오.
- 모든 상호 작용을 검증하지 마십시오. 먼저 결과를 검증하고, 상호 작용이 동작 자체인 경우에만 상호 작용을 검증합니다.
-
검증 및 보고
- 저장소의 래퍼, 모듈, 플러그인, 소스 세트 및 CI 설정에서 명령을 발견합니다.
references/java-testing-tooling.md를 읽어 빌드 및 실패 처리 규칙을 확인합니다. - 먼저 가장 좁은 관련 테스트 명령을 실행한 다음, 블라스트 반경이 필요한 경우 더 넓은 스위트를 실행합니다.
- 상위 수준 테스트가 하위 수준 테스트에서 잡히지 않는 버그를 노출하는 경우 하위 수준 회귀 테스트를 추가합니다.
- 하위 수준 테스트가 이미 조건을 다루고 상위 수준 테스트가 고유한 신뢰도를 추가하지 않는 경우 중복된 상위 수준 검사를 제거하거나 피합니다.
- 추가 또는 리뷰한 테스트, 다루는 동작, 명령 및 결과, 실패 또는 사용할 수 없는 검사, 남은 위험을 보고합니다. 새로운 실패를 확인된 기존 또는 환경적 실패와 구분합니다.
- 저장소의 래퍼, 모듈, 플러그인, 소스 세트 및 CI 설정에서 명령을 발견합니다.
참조
- 테스트 범위, CI 배치, 중복 또는 추가할 종단 간 테스트 양을 결정할 때
references/test-pyramid.md를 읽으십시오. - Java 테스트 도구, 종속성, 어노테이션, Mock 스타일, Spring Boot 테스트 형태, Testcontainers 패턴, API 테스트, 계약 테스트, 빌드 명령 또는 실패 분류를 선택할 때
references/java-testing-tooling.md를 읽으십시오.