테스트 검증카드 — pytest/jest 대응 (파동① 존재≠동작 검증)
개요
한선씨(크라우니어)에서 pytest/jest에 대응하는 테스트 프레임워크가 무엇인지 인벤토리+실측하고,
대응표+검증된 예제+함정을 카드로 고정했다. SQL카드.md와 동일한 방법론(실컴파일+실행 검증만 수록,
*검증.sh 게이트로 재확인 가능)을 따랐다.
무엇을 했는지
- 인벤토리:
/Users/ef/Downloads/CrownyTVM/std/"테스트 8파일"(미니테스트/셀코어_테스트 1~3(.han+.rpn.han)/테스트50)을 확인했으나 전부 assert 없는 수동 print 스모크 스크립트(eyeball 검증)임을 발견 — pytest 대응이 아니다. - 정본 발견: 실제 pytest 대응 프레임워크는
/Users/ef/CrownyOS/crownyc/pkg/libs/단위테스트.한선(15함수: 테스트시작/테스트그룹/확인같음/확인다름/확인포함/확인크다/확인작다/확인참/확인거짓/확인없음/확인배열같음/확인범위/테스트끝/테스트요약).crowny_test_runnerMCP 도구 배선을 끝까지 추적: mcp-server.js → 크라우니도구.sh call test_runner → tools/run-tool.sh 테스트러너 → 테스트러너.한선(단위테스트.한선 사용, 32개 확인문) → 실행 결과 32/32 PASS 확인. - 핵심 실측 (모두 실컴파일+실행으로 확인, 추측 없음):
확인같음 등은 실패해도 계속 실행된다(pytest와 동일 collect-all) — 좋은 소식.
- ★최대 함정: 확인 실패가 있어도 프로세스 종료코드는 항상 0. CI 게이트는 $?가 아니라 stdout의 >>> ALL PASS <<</>>> FAILURES: N <<< 텍스트 마커로 판정해야 함.
- ★최대 함정: 내장 단언(opcode638 ASSERT)은 확인같음 계열과 완전히 다른 시스템 — 실패 시 (a) stderr에만 메시지 찍고 stdout은 무음, (b) VM 전체가 즉시 멈춤(이후 테스트 전혀 미실행, pytest와 정반대), (c) 그래도 exit code는 0. 2>/dev/null 관행과 겹치면 완전 무음 실패. 테스트 코드에 내장 단언 사용 금지를 카드에 명시.
- 단언(모름)도 실패 취급(조건 <=0, Kleene 모름=0 포함).
- 확인없음은 None 대응이 아니라 "빈 문자열" 대응(정수 0은 "없음" 취급 안 됨).
- 테스트그룹()은 순수 라벨(전역 카운터 공유, 스코프/격리 없음).
- MCP/run-tool.sh는 파일 1개만 실행 — 디렉토리 자동 discovery 없음(파동②로 이관).
- 관용구 실증: parametrize(데이터배열+루프)와 fixture(준비()/정리() 수동 호출+격리 검증)를 각각 작성해 실컴파일+실행으로 검증.
- 카드+게이트 작성:
테스트카드.md(대응표+함정 8종+예제5+갭8) +테스트검증.sh(5/5 PASS 상태로 완성).
관련 파일
/Users/ef/crowny-rpnkit/라이브러리카드/테스트카드.md/Users/ef/crowny-rpnkit/라이브러리카드/테스트검증.sh(5/5 PASS)/Users/ef/crowny-rpnkit/라이브러리카드/테스트예제/01~05*.한선- 정본 자산(수정 안 함):
/Users/ef/CrownyOS/crownyc/pkg/libs/단위테스트.한선,/Users/ef/Downloads/CrownyTVM/crownycode-agent/tools/{테스트러너.한선,run-tool.sh}
잔여 이슈 (§5 갭 목록, 우선순위순)
- P1: 디렉토리 자동 discovery(여러 테스트파일 배치실행) 없음 — 새 정본 러너는 파동② 범위
- P1: 실패해도 종료코드 0 — 래퍼 레벨에서 stdout grep 후 exit 1 되돌리는 개선 필요
- P1: 내장 단언과 확인계열 혼재 위험 — 정적 린트로 테스트 파일 내 bare
단언(탐지 경고 필요 - P2: fixture 자동 setup/teardown 없음, parametrize 네이티브 문법 없음(관용구로 충분)
- P3/P4: mock/stub, skip/xfail, coverage 전부 미대응