Repository navigation
maintenance(platform): CI Test Plan 검증기가 selector 의 @Test 메서드가 선언한 클래스 본문 안에 있는지 보지 않는다 #2156
Description
작업 유형
maintenance — CI·빌드·의존성·저장소 운영 유지보수
주 담당 모듈
platform — CI·빌드·릴리스·저장소 운영
개요
.github/scripts/ci-test-plan.mjs 의 validateCiTestPlanSources 는 selected 계획의 selector 마다 두 가지를 따로 본다. 선언한 클래스가 파일에 있는가, 그리고 @Test fun <method>( 가 파일에 있는가. 메서드가 그 클래스 본문 안에 있는지는 보지 않는다. 그래서 한 파일에 클래스가 둘 이상이면 다른 클래스의 메서드를 붙인 selector 가 Repository Quality 를 통과하고, GMD 잡에서 0건 실행으로 떨어진다.
app/src/androidTest/java/com/afternote/afternote_fe/AppAndReceiverCompletionAndroidTest.kt 가 그런 파일이다. AppAndReceiverCompletionAndroidTest(97행)에는 @test 가 둘(invalidCredentials_correctedPasswordThenRetry_entersHomeWithoutReportingUserError, welcomeCheckRecords_opensActualReceivedRecordsStartDestination)뿐이고, 나머지는 같은 파일의 ReceiverRuntimeCompletionAndroidTest(225행) 소속이다.
실측 (PR #2153, 2026-09-23)
- 처음 본문의 selector:
com.afternote.afternote_fe.AppAndReceiverCompletionAndroidTest#homeActions_routeImplementedEntryPointsToExactDestinations. 이 메서드는ReceiverRuntimeCompletionAndroidTest소속이다. - Repository Quality (run 35834748233):
validate-pr-ci-test-plan.mjs가CI Test Plan: androidTest mode=selected를 찍고 exit 0. - Android Managed Device Test API 34 (run 35834747997, run 35837524399): 선택 테스트 검증 단계에서
Managed Device XML에서 실행 결과를 찾지 못했습니다: com.afternote.afternote_fe.AppAndReceiverCompletionAndroidTest#homeActions_routeImplementedEntryPointsToExactDestinations. 첫 run 아티팩트accessibility-api34.log에서 목록 실행은Starting 6 tests(선언 7개)였고, 누락 selector 하나만 다시 돌린selected retry 1/1은Starting 0 tests였다. 그 재실행 로그는 누락 원인을 ci: managed-device selected 레인이 같은 클래스 selector 를 앞 2개만 실행 — 선언·검증 정책과 실행이 불일치 #1378 로 표기한다.
같은 파일에서 여섯 번째다. 최근 머지 PR 60건과 열린 PR 의 본문 수정 이력을 모두 대조하니, ReceiverRuntimeCompletionAndroidTest 메서드를 AppAndReceiverCompletionAndroidTest#... 로 적은 selector 가 #1371(8개), #1373(8개), #1374·#1468·#1724(2개씩), #2153(1개)에 있었다. #1371·#1373 은 2026-08-28 13:10Z 본문에 그렇게 적었다가 17:35Z 에 고쳤고, 나머지도 뒤에 본문을 고쳤다.
완료 조건
- selected 계획의 각 selector 는 선언한 클래스의 본문 안에
@Test fun <method>(가 있을 때만 통과한다. 본문은 클래스 선언 뒤 첫 여는 중괄호부터 짝이 맞는 닫는 중괄호까지이고, 문자열·문자·주석 안의 중괄호는 세지 않는다. - 메서드가 파일의 다른 클래스에만 있으면 Repository Quality 가 실패하고, 메시지에 selector 가 들어간다.
.github/scripts/ci-test-plan.test.mjs에 fix(core,app): Nav3 화면의 predictive back 배경을 불투명하게 유지한다 (#2145) #2153 모양(한 파일 두 클래스, 다른 클래스의 메서드를 붙인 selector) 정책 테스트를 두고, 수정 전 코드에서 그 테스트가 실패하는 것을 확인한다.- 현재 develop 의 androidTest 파일 전부에서 @test 메서드를 실제 소속 클래스로 적은 selector 는 모두 통과한다(오탐 0).
자식 이슈
참고
- ci: managed-device selected 레인이 같은 클래스 selector 를 앞 2개만 실행 — 선언·검증 정책과 실행이 불일치 #1378 의 실측 표에서 fix(receiver): 수신자 본인 확인 캐시를 발신자별 키로 격리 (#597) #1371·refactor(receiver): 수신자 열람 흐름 리소스 89건을 receiver presentation 소유로 이동 (#1066) #1373 이 "APP 앞 2개만 실행"(
Starting 2 tests)되고 8개가 누락됐다고 적은 두 런은, 누락 8개가 전부ReceiverRuntimeCompletionAndroidTest소속이고 실행된 2개가AppAndReceiverCompletionAndroidTest가 가진 @test 전부였다. 그때는 실행기의 selector 드롭으로 진단했지만 적어도 이 두 런은 이 결함으로 설명된다. ci-test-plan.mjs는FULL_REQUIRED_PATHS에 들어 있다. 이 파일만 고치는 PR 도androidTest.mode가full이어야 한다.
Activity