Repository navigation
Development
한국어 | English
pip install -r requirements-dev.txt
pytesttests/는 4개 계층으로 나뉘어 있습니다:
| 디렉터리 | 보장하는 것 | 실행 |
|---|---|---|
tests/unit/ |
common/의 순수 함수와 벤더 파서 핵심 로직(_active_branch_nodes, _parse_kst, Claude의 두 로더 등)을 합성 데이터로 개별 검증 |
pytest tests/unit |
tests/regression/ |
과거 이슈에서 실제로 일어났던 버그(#11 Gemini 중첩 첨부파일, #13 __MACOSX 정렬, #16 CRLF, Claude의 멀티라인 blockquote 중첩 깊이 및 design_chats 실제 필드명 오추측)를 그때와 같은 경로로 재현해서 고정 |
pytest -m regression |
tests/integration/ |
argparse → resolve_source → run_vendor → detect/convert → upsert/publish로 이어지는 CLI 전체 배선을 end-to-end 검증(합성 픽스처만 사용, 실제 data//config.json은 절대 안 건드림) |
pytest -m integration |
tests/smoke/ |
가장 얕고 빠른 확인 — import가 깨지지 않는지, CLI가 최소한 죽지 않고 시작하는지만 확인 | pytest -m smoke |
실제 대용량 takeout 데이터를 이용한 전체 파이프라인 검증(기존 결과물과의 byte-diff)은
자동 테스트에 포함하지 않았습니다 — 개인 데이터라 커밋할 수 없기 때문에, 회귀가
의심될 때 수동으로 재실행해서 비교합니다. Claude 벤더의 회귀 테스트들이 바로 이렇게
만들어졌습니다: 실제 export로 파이프라인을 재실행하고, 원본 데이터의 블록 타입별
개수와 렌더링된 마커 개수를 대조하다가, 어떤 합성 픽스처도 건드리지 못했던 버그(여러
줄짜리 값에서 blockquote 중첩 깊이가 들쭉날쭉해지는 문제, 타임스탬프가 로컬 변환 없이
UTC 그대로 남는 문제, design_chats의 일부 필드 실제 키 이름이 처음 추측과 다른
문제)를 몇 개 잡아냈습니다.
run.main()은 실제 프로젝트의 config.json을 무조건 읽고(없으면 새로 만들고),
아무것도 안 정해져 있으면 data/<vendor>/(개인 데이터가 들어있을 수 있는 실제
경로)로 폴백합니다. tests/conftest.py의 _isolate_real_project_paths autouse
fixture가 모든 테스트에서 이 두 경로를 자동으로 임시 경로로 격리해주므로, 새 테스트를
짤 때 이걸 깜빡해도 실제 프로젝트 파일은 안전합니다 — 다만 이건 실수를 무해하게
만들어주는 안전망일 뿐이지, 명시적으로 지정하지 않아도 된다는 뜻은 아닙니다. CLI
레벨 테스트는 여전히 --input/--output-dir/--vault-dir을 임시 경로로 명시해서
써야 합니다.
관련 문서: Architecture