← 목록
기타 2026-07-07 4KB 읽기 4분

테스트 검증카드 — pytest/jest 대응 (파동① 존재≠동작 검증)

개요

한선씨(크라우니어)에서 pytest/jest에 대응하는 테스트 프레임워크가 무엇인지 인벤토리+실측하고, 대응표+검증된 예제+함정을 카드로 고정했다. SQL카드.md와 동일한 방법론(실컴파일+실행 검증만 수록, *검증.sh 게이트로 재확인 가능)을 따랐다.

무엇을 했는지

  1. 인벤토리: /Users/ef/Downloads/CrownyTVM/std/ "테스트 8파일"(미니테스트/셀코어_테스트 1~3(.han+.rpn.han)/테스트50)을 확인했으나 전부 assert 없는 수동 print 스모크 스크립트(eyeball 검증)임을 발견 — pytest 대응이 아니다.
  2. 정본 발견: 실제 pytest 대응 프레임워크는 /Users/ef/CrownyOS/crownyc/pkg/libs/단위테스트.한선(15함수: 테스트시작/테스트그룹/확인같음/확인다름/확인포함/확인크다/확인작다/확인참/확인거짓/확인없음/확인배열같음/확인범위/테스트끝/테스트요약). crowny_test_runner MCP 도구 배선을 끝까지 추적: mcp-server.js → 크라우니도구.sh call test_runner → tools/run-tool.sh 테스트러너 → 테스트러너.한선(단위테스트.한선 사용, 32개 확인문) → 실행 결과 32/32 PASS 확인.
  3. 핵심 실측 (모두 실컴파일+실행으로 확인, 추측 없음):
- 확인같음 등은 실패해도 계속 실행된다(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 없음(파동②로 이관).
  1. 관용구 실증: parametrize(데이터배열+루프)와 fixture(준비()/정리() 수동 호출+격리 검증)를 각각 작성해 실컴파일+실행으로 검증.
  2. 카드+게이트 작성: 테스트카드.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 전부 미대응
크라우니코드: lookup HIT 2건(단위테스트 라이브러리 기존 등록분 재사용) / MISS 3건(파라미터화 관용구·픽스처 관용구·내장단언 함정 intent 신규) / learn 추가 3건