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

92 lines
3.7 KiB
Markdown
Raw Permalink 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.
# 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``-s`MUST 互斥,不能同时使用。
#### Scenario: 默认输出与其他选项冲突
- **WHEN** 用户尝试使用多个输出选项
- **THEN** argparse 自动处理互斥,只允许一个选项生效