JaCoCo를 사용한 테스트 커버리지 분석
청약플래닛 백엔드 관련 문서입니다.
프로젝트에 JaCoCo가 이미 설정되어 있으며, 다음과 같은 기능을 제공합니다:
./gradlew test jacocoTestReport
./gradlew jacocoTestCoverageVerification
./gradlew check
다음 클래스/패키지는 커버리지 계산에서 제외됩니다:
build/reports/jacoco/test/html/index.html
브라우저에서 열어 시각적으로 커버리지를 확인할 수 있습니다.
build/reports/jacoco/test/jacocoTestReport.xml
CI/CD 도구나 SonarQube 등에서 사용할 수 있는 표준 형식입니다.
build/reports/jacoco/test/jacocoTestReport.csv
스프레드시트나 데이터 분석에 사용할 수 있는 형식입니다.
프로젝트의 모든 테스트는 Given-When-Then 패턴을 따릅니다:
@Test
@DisplayName("사용자 생성 성공 테스트")
void givenValidUserData_whenCreateUser_thenReturnCreatedUser() {
// Given: 테스트 전제조건 설정
String email = "test@test.com";
SignupRequestDTO requestDTO = new SignupRequestDTO(email, "password", "username");
given(userRepository.findByEmail(email)).willReturn(Optional.empty());
// When: 테스트 대상 메서드 실행
User result = userService.signup(requestDTO);
// Then: 결과 검증
assertThat(result.getEmail()).isEqualTo(email);
then(userRepository).should().save(any(User.class));
}
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock private UserRepository userRepository;
@Mock private PasswordEncoder passwordEncoder;
@InjectMocks private UserService userService;
// 성공 시나리오 테스트
@Test void givenValidData_whenAction_thenSuccess() { }
// 실패 시나리오 테스트
@Test void givenInvalidData_whenAction_thenThrowException() { }
// 경계값 테스트
@Test void givenEdgeCase_whenAction_thenHandleCorrectly() { }
}
# 특정 클래스 테스트
./gradlew test --tests UserServiceTest
# 특정 메서드 테스트
./gradlew test --tests UserServiceTest.givenValidData_whenCreateUser_thenSuccess
# 전체 테스트 + 커버리지 검증
./gradlew check
# 테스트 실행 + 리포트 생성
./gradlew test jacocoTestReport
# 커버리지 기준 검증
./gradlew jacocoTestCoverageVerification
현재 커버리지 현황에 따른 우선 개선 영역:
./gradlew sonarqube -Dsonar.host.url=http://localhost:9000
- name: Test with Gradle
run: ./gradlew test jacocoTestReport
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3