Files
lanyuanxiaoyao 7eab1dcef1 test: 添加全面的测试套件,覆盖所有 Reader 实现
- 测试数量从 83 个增加到 193 个 (+132%)
- 代码覆盖率从 48% 提升到 69% (+44%)
- 为每种文档格式的所有 Reader 实现创建独立测试
- 添加跨 Reader 的一致性验证测试
- 新增 4 个测试规范 (cli-testing, exception-testing, reader-testing, test-fixtures)
- 更新 README 测试统计信息

测试覆盖:
- DOCX: python-docx, markitdown, docling, native-xml, pypandoc, unstructured
- PDF: pypdf, markitdown, docling, docling-ocr, unstructured, unstructured-ocr
- HTML: html2text, markitdown, trafilatura, domscribe
- PPTX: python-pptx, markitdown, docling, native-xml, unstructured
- XLSX: pandas, markitdown, docling, native-xml, unstructured
- CLI: 所有命令行选项和错误处理

所有 193 个测试通过。
2026-03-08 22:20:21 +08:00

3.7 KiB
Raw Permalink Blame History

CLI Testing Specification

Purpose

定义 CLI 命令行工具的功能测试规范,包括输出格式、选项处理、错误处理等。

Requirements

Requirement: CLI 输出解析内容

CLI 在不指定任何选项时MUST 输出完整的解析后 Markdown 内容到标准输出。

Scenario: 解析 DOCX 文件

  • WHEN 用户执行 python lyxy_document_reader.py file.docx
  • THEN 标准输出包含解析后的 Markdown 内容

Scenario: 解析 PDF 文件

  • WHEN 用户执行 python lyxy_document_reader.py file.pdf
  • THEN 标准输出包含解析后的 Markdown 内容

Scenario: 解析 HTML 文件

  • WHEN 用户执行 python lyxy_document_reader.py file.html
  • THEN 标准输出包含解析后的 Markdown 内容

Requirement: CLI 统计字数

CLI 使用 -c--count 选项时MUST 输出解析后内容的字符总数(不包含换行符)。

Scenario: 统计 DOCX 字数

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -c
  • THEN 标准输出仅包含一个表示字符总数的数字

Requirement: CLI 统计行数

CLI 使用 -l--lines 选项时MUST 输出解析后的行数。

Scenario: 统计行数

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -l
  • THEN 标准输出仅包含一个表示行数的数字

Requirement: CLI 提取标题

CLI 使用 -t--titles 选项时MUST 输出所有 1-6 级标题行。

Scenario: 提取所有标题

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -t
  • THEN 标准输出包含所有标题行,每行一个标题

Requirement: CLI 提取标题内容

CLI 使用 -tc--title-content 选项时MUST 输出指定标题及其下级内容。

Scenario: 提取存在的标题内容

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -tc "章节标题"
  • THEN 标准输出包含该标题及其下级内容(不包含 # 号)

Scenario: 提取不存在的标题

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -tc "不存在的标题"
  • THEN 程序输出错误信息并以非零状态退出

Requirement: CLI 搜索内容

CLI 使用 -s--search 选项时MUST 使用正则表达式搜索文档并输出匹配结果。

Scenario: 搜索匹配内容

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -s "关键词"
  • THEN 标准输出包含所有匹配的上下文,用 --- 分隔

Scenario: 搜索无匹配内容

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -s "不存在的内容"
  • THEN 程序输出错误信息并以非零状态退出

Scenario: 搜索使用上下文行数

  • WHEN 用户执行 python lyxy_document_reader.py file.docx -s "关键词" -n 5
  • THEN 输出每个匹配结果前后各 5 行非空内容

Requirement: CLI 错误处理

CLI 遇到错误时MUST 输出清晰的错误信息并以非零状态退出。

Scenario: 文件不存在

  • WHEN 用户执行 python lyxy_document_reader.py nonexistent.docx
  • THEN 程序输出错误信息并以状态码 1 退出

Scenario: 不支持的文件类型

  • WHEN 用户执行 python lyxy_document_reader.py unsupported.xyz
  • THEN 程序输出未找到支持 reader 的错误信息

Scenario: 所有解析方法失败

  • WHEN 所有 Reader 解析均失败
  • THEN 程序输出各 Reader 的失败原因列表

Requirement: CLI 选项互斥

CLI 的输出选项(-c-l-t-tc-sMUST 互斥,不能同时使用。

Scenario: 默认输出与其他选项冲突

  • WHEN 用户尝试使用多个输出选项
  • THEN argparse 自动处理互斥,只允许一个选项生效