Files
Video-Tree-TRM5/tests/integration/test_cli_generate_v2.py
T
iomgaa 36c712defa feat(pipeline): replace QuestionFamilySpec with TaskTypeStrategy
- SlotAssignment: remove family field, strategy looked up at process time
- PipelineConfig: remove family_ratios field
- _assign_slots: remove family_ratios and rng params (pure deterministic)
- _process_one_slot: use get_strategy() for sampling, generation, gates
- Add sub_pattern support (level/constraint override, instruction injection)
- Add strategy.extra_gates() check after standard gates
- load_pipeline_config: stop reading family_ratios from YAML
- Update tools/generate_questions.py seed override and dry-run log
- Update all integration tests to match new API

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-07-14 06:05:23 -04:00

91 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""generate-v2 CLI 子命令集成测试 — 验证 CLI 入口、dry-run 模式与参数解析。
测试策略:
- test_subcommand_help: 验证子命令注册成功、--help 返回码 0 且包含 --config
- test_dry_run: 验证 dry-run 模式不调用 LLM/VLM,仅输出统计信息
"""
from __future__ import annotations
import subprocess
import sys
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
class TestCLIGenerateV2:
"""generate-v2 子命令 CLI 集成测试。"""
def test_subcommand_help(self) -> None:
"""验证 generate-v2 子命令已注册,--help 正确退出并包含 --config 参数说明。"""
result = subprocess.run(
[
sys.executable,
str(PROJECT_ROOT / "tools" / "generate_questions.py"),
"generate-v2",
"--help",
],
capture_output=True,
text=True,
timeout=30,
)
assert result.returncode == 0, f"stderr: {result.stderr}"
assert "--config" in result.stdout
assert "--store-dir" in result.stdout
assert "--dry-run" in result.stdout
def test_dry_run(self, tmp_path: Path) -> None:
"""验证 dry-run 模式:加载配置、计算 slot,但不调用 LLM/VLM。
通过创建最小 config + 临时 store-dir 来验证 dry-run 的快速退出行为。
"""
# 创建最小配置文件
config_path = tmp_path / "config.yaml"
config_path.write_text(
"""\
question_gen_v2:
dedup_threshold: 0.85
retry_limit: 3
heavy_sample_rate: 0.15
output_dir: "{output_dir}"
per_type: 2
concurrency: 2
seed: 42
""".format(output_dir=str(tmp_path / "output")),
encoding="utf-8",
)
# 创建 store-dir 结构:至少一个带 tree.json 的视频目录
store_dir = tmp_path / "store"
videos_dir = store_dir / "videos"
video_dir = videos_dir / "test_video_001"
video_dir.mkdir(parents=True)
# 最小 tree.json(仅需存在)
(video_dir / "tree.json").write_text("{}", encoding="utf-8")
db_path = tmp_path / "question_gen.db"
result = subprocess.run(
[
sys.executable,
str(PROJECT_ROOT / "tools" / "generate_questions.py"),
"generate-v2",
"--config",
str(config_path),
"--store-dir",
str(store_dir),
"--db-path",
str(db_path),
"--dry-run",
],
capture_output=True,
text=True,
timeout=30,
)
assert result.returncode == 0, f"stderr: {result.stderr}"
# dry-run 应输出 slot 统计信息到 stderrloguru 输出)
assert "dry-run" in result.stderr.lower() or "slot" in result.stderr.lower()
# 确保没有创建 telemetry db(意味着未初始化 LLM 客户端)
# DB 可能会被创建用于 store,但不应有 telemetry 调用