# Design Document

## Overview

本设计文档描述了 Argon 主题 AI 垃圾评论检测优化功能的技术实现方案。系统采用模块化架构，将 Prompt 管理、置信度评分、上下文构建、学习机制等功能解耦，便于维护和扩展。

核心设计理念：
- **灵活性优先**：通过多级 Prompt 和可配置阈值适应不同场景
- **准确性保障**：引入置信度评分和上下文信息提升判断质量
- **成本可控**：提供不同模式平衡准确性和 API 费用
- **持续优化**：通过学习机制不断改进检测效果

## Architecture

系统采用分层架构设计：

```mermaid
graph TB
    subgraph "表现层"
        A[设置界面] --> B[评论列表界面]
    end
    
    subgraph "业务逻辑层"
        C[AI_Detector 主控制器]
        D[Prompt_Engine]
        E[Context_Builder]
        F[Learning_Module]
        G[Threshold_Manager]
    end
    
    subgraph "数据访问层"
        H[WordPress Options API]
        I[WordPress Comments API]
        J[Feedback Database]
    end
    
    subgraph "外部服务"
        K[OpenAI API]
        L[其他 AI Provider]
    end
    
    A --> C
    B --> C
    C --> D
    C --> E
    C --> F
    C --> G
    D --> K
    D --> L
    E --> I
    F --> J
    G --> H
    C --> H
    C --> I
```

### 核心组件职责

1. **AI_Detector**: 主控制器，协调各模块完成检测流程
2. **Prompt_Engine**: 管理不同模式的 Prompt 模板，生成检测请求
3. **Context_Builder**: 收集和构建评论上下文信息
4. **Learning_Module**: 记录反馈数据，分析误判率，提供优化建议
5. **Threshold_Manager**: 管理检测阈值和处理策略

## Components and Interfaces

### 1. Prompt_Engine

**职责**: 管理和生成不同模式的 Prompt

**接口**:
```php
class Argon_Spam_Prompt_Engine {
    /**
     * 获取指定模式的 Prompt
     * @param string $mode 模式: minimal, standard, enhanced, custom
     * @param array $context 评论上下文信息
     * @return string 完整的 Prompt
     */
    public function get_prompt($mode, $context);
    
    /**
     * 获取自定义 Prompt 模板
     * @return string 自定义模板
     */
    public function get_custom_template();
    
    /**
     * 保存自定义 Prompt 模板
     * @param string $template 模板内容
     * @return bool 是否成功
     */
    public function save_custom_template($template);
    
    /**
     * 验证 Prompt 模板格式
     * @param string $template 模板内容
     * @return array ['valid' => bool, 'errors' => array]
     */
    public function validate_template($template);
}
```

**Prompt 模板结构**:

极简模式（minimal）:
```
你是一个垃圾评论检测助手。请判断以下评论是否为垃圾评论。

评论内容: {content}
评论者: {author}
网站: {url}

请以 JSON 格式返回:
{
  "is_spam": true/false,
  "confidence": 0.0-1.0,
  "reason": "简短理由"
}
```

标准模式（standard）:
```
你是一个专业的垃圾评论检测助手。请根据以下标准判断评论是否为垃圾:
1. 内容质量: 是否有实质性内容
2. 相关性: 是否与文章主题相关
3. 用户行为: 用户名、邮箱、网站是否可疑
4. 语言特征: 是否包含垃圾评论常见模式

评论信息:
- 内容: {content}
- 评论者: {author}
- 邮箱域名: {email_domain}
- 网站: {url}
- 文章标题: {post_title}
- 文章摘要: {post_excerpt}

用户历史:
- 历史评论数: {comment_count}
- 通过率: {approval_rate}

请以 JSON 格式返回:
{
  "is_spam": true/false,
  "confidence": 0.0-1.0,
  "reason": "详细理由",
  "suggestion": "auto/review/approve"
}
```

增强模式（enhanced）:
```
你是一个高级垃圾评论检测专家。请进行多维度深度分析:

1. 内容合规性分析
   - 是否包含违规内容
   - 是否包含广告推广
   - 是否包含恶意链接

2. 内容质量分析
   - 是否有实质性观点
   - 语言表达是否自然
   - 是否为复制粘贴内容

3. 用户行为分析
   - 用户名是否可疑（随机字符、营销词汇）
   - 邮箱域名是否可信
   - 网站是否为垃圾站点

4. 上下文相关性分析
   - 评论与文章主题的相关度
   - 评论时间是否异常（批量发送）
   - 用户历史行为是否正常

评论信息:
- 内容: {content}
- 评论者: {author}
- 邮箱域名: {email_domain}
- 网站: {url}
- IP 地址段: {ip_segment}
- 评论时间: {comment_time}

文章信息:
- 标题: {post_title}
- 摘要: {post_excerpt}
- 分类: {post_category}

用户历史:
- 历史评论数: {comment_count}
- 通过率: {approval_rate}
- 最近评论时间: {last_comment_time}

请以 JSON 格式返回:
{
  "is_spam": true/false,
  "confidence": 0.0-1.0,
  "reason": "综合分析理由",
  "suggestion": "auto/review/approve",
  "analysis": {
    "content_compliance": "分析结果",
    "content_quality": "分析结果",
    "user_behavior": "分析结果",
    "context_relevance": "分析结果"
  }
}
```

### 2. Context_Builder

**职责**: 收集和构建评论上下文信息

**接口**:
```php
class Argon_Spam_Context_Builder {
    /**
     * 构建评论上下文
     * @param WP_Comment $comment 评论对象
     * @param string $privacy_level 隐私级别: standard, strict
     * @return array 上下文信息数组
     */
    public function build_context($comment, $privacy_level = 'standard');
    
    /**
     * 获取文章信息
     * @param int $post_id 文章 ID
     * @return array ['title' => string, 'excerpt' => string, 'category' => string]
     */
    private function get_post_info($post_id);
    
    /**
     * 获取用户历史统计
     * @param string $email 用户邮箱
     * @return array ['count' => int, 'approval_rate' => float, 'last_time' => string]
     */
    private function get_user_stats($email);
    
    /**
     * 脱敏处理
     * @param array $context 原始上下文
     * @param string $privacy_level 隐私级别
     * @return array 脱敏后的上下文
     */
    private function sanitize_context($context, $privacy_level);
}
```

**上下文数据结构**:
```php
[
    'content' => string,           // 评论内容
    'author' => string,            // 评论者名称
    'email_domain' => string,      // 邮箱域名（脱敏）
    'url' => string,               // 网站 URL
    'ip_segment' => string,        // IP 地址段（脱敏）
    'comment_time' => string,      // 评论时间
    'post_title' => string,        // 文章标题
    'post_excerpt' => string,      // 文章摘要（截取 200 字符）
    'post_category' => string,     // 文章分类
    'comment_count' => int,        // 用户历史评论数
    'approval_rate' => float,      // 用户评论通过率
    'last_comment_time' => string  // 最近评论时间
]
```

### 3. AI_Detector

**职责**: 主控制器，协调检测流程

**接口**:
```php
class Argon_Spam_AI_Detector {
    /**
     * 检测评论是否为垃圾
     * @param WP_Comment $comment 评论对象
     * @param bool $async 是否异步检测
     * @return array 检测结果
     */
    public function detect($comment, $async = true);
    
    /**
     * 处理检测结果
     * @param WP_Comment $comment 评论对象
     * @param array $result 检测结果
     * @return void
     */
    public function process_result($comment, $result);
    
    /**
     * 批量检测评论
     * @param array $comment_ids 评论 ID 数组
     * @param callable $progress_callback 进度回调函数
     * @return array 检测结果统计
     */
    public function batch_detect($comment_ids, $progress_callback = null);
    
    /**
     * 测试 Prompt
     * @param string $content 测试内容
     * @param string $mode Prompt 模式
     * @return array 检测结果
     */
    public function test_prompt($content, $mode);
}
```

**检测结果数据结构**:
```php
[
    'is_spam' => bool,              // 是否垃圾评论
    'confidence' => float,          // 置信度 0-1
    'reason' => string,             // 判断理由
    'suggestion' => string,         // 处理建议: auto/review/approve
    'analysis' => array,            // 详细分析（仅增强模式）
    'timestamp' => int,             // 检测时间戳
    'mode' => string,               // 使用的 Prompt 模式
    'api_provider' => string        // API 提供商
]
```

### 4. Learning_Module

**职责**: 记录反馈数据，分析误判率

**接口**:
```php
class Argon_Spam_Learning_Module {
    /**
     * 记录反馈
     * @param int $comment_id 评论 ID
     * @param array $ai_result AI 检测结果
     * @param string $admin_action 管理员操作: approve, spam, trash
     * @return bool 是否成功
     */
    public function record_feedback($comment_id, $ai_result, $admin_action);
    
    /**
     * 计算误判率
     * @param int $days 统计天数
     * @return array ['total' => int, 'false_positive' => int, 'false_negative' => int, 'rate' => float]
     */
    public function calculate_error_rate($days = 30);
    
    /**
     * 获取优化建议
     * @return array 建议列表
     */
    public function get_optimization_suggestions();
    
    /**
     * 导出反馈数据
     * @param int $days 导出天数
     * @return string CSV 格式数据
     */
    public function export_feedback($days = 30);
    
    /**
     * 获取统计数据
     * @return array 统计信息
     */
    public function get_statistics();
}
```

**反馈记录数据结构**:
```php
[
    'comment_id' => int,
    'ai_result' => array,           // AI 检测结果
    'admin_action' => string,       // 管理员操作
    'timestamp' => int,
    'pattern_hash' => string,       // 评论特征哈希
    'is_error' => bool              // 是否误判
]
```

### 5. Threshold_Manager

**职责**: 管理检测阈值和处理策略

**接口**:
```php
class Argon_Spam_Threshold_Manager {
    /**
     * 获取当前阈值
     * @return float 阈值 0.5-1.0
     */
    public function get_threshold();
    
    /**
     * 设置阈值
     * @param float $threshold 阈值
     * @return bool 是否成功
     */
    public function set_threshold($threshold);
    
    /**
     * 判断是否应该自动处理
     * @param array $result 检测结果
     * @return bool 是否自动处理
     */
    public function should_auto_process($result);
    
    /**
     * 获取推荐配置
     * @param string $blog_size 博客规模: small, medium, large
     * @return array 推荐配置
     */
    public function get_recommended_config($blog_size);
}
```

## Data Models

### 1. 配置选项（WordPress Options）

```php
// Prompt 模式
'argon_spam_detection_prompt_mode' => 'standard' // minimal, standard, enhanced, custom

// 自定义 Prompt 模板
'argon_spam_detection_custom_prompt' => ''

// 检测阈值
'argon_spam_detection_threshold' => 0.85 // 0.5-1.0

// 智能抽查比例
'argon_spam_detection_sample_rate' => 30 // 0-100

// 隐私级别
'argon_spam_detection_privacy_level' => 'standard' // standard, strict

// API 配置
'argon_spam_detection_api_provider' => 'openai' // openai, custom
'argon_spam_detection_api_key' => ''
'argon_spam_detection_api_endpoint' => ''

// 实时检测开关
'argon_spam_detection_realtime_enabled' => true

// 自动禁用配置
'argon_spam_detection_auto_disable_after_errors' => 3
'argon_spam_detection_auto_disable_duration' => 3600 // 秒

// 统计数据
'argon_spam_detection_stats' => [
    'total_detections' => 0,
    'auto_processed' => 0,
    'manual_reviewed' => 0,
    'api_calls_this_month' => 0,
    'last_reset_time' => 0
]
```

### 2. 评论元数据（Comment Meta）

```php
// AI 检测结果
'argon_spam_ai_result' => [
    'is_spam' => bool,
    'confidence' => float,
    'reason' => string,
    'suggestion' => string,
    'analysis' => array,
    'timestamp' => int,
    'mode' => string,
    'api_provider' => string
]

// 检测状态
'argon_spam_detection_status' => 'pending' // pending, completed, failed

// 重新检测次数
'argon_spam_redetection_count' => 0
```

### 3. 反馈数据库表

创建自定义表存储反馈数据：

```sql
CREATE TABLE {prefix}_argon_spam_feedback (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    comment_id BIGINT UNSIGNED NOT NULL,
    ai_is_spam TINYINT(1) NOT NULL,
    ai_confidence FLOAT NOT NULL,
    ai_reason TEXT,
    ai_suggestion VARCHAR(20),
    admin_action VARCHAR(20) NOT NULL,
    is_error TINYINT(1) NOT NULL,
    pattern_hash VARCHAR(64),
    created_at DATETIME NOT NULL,
    PRIMARY KEY (id),
    KEY comment_id (comment_id),
    KEY created_at (created_at),
    KEY is_error (is_error)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

## Correctness Properties

*属性是一个特征或行为，应该在系统的所有有效执行中保持为真——本质上是关于系统应该做什么的正式陈述。属性作为人类可读规范和机器可验证正确性保证之间的桥梁。*

### Property 1: Prompt 模式完整性

*对于任何* 上下文数据，Prompt_Engine 应该能够为所有三种预设模式（minimal、standard、enhanced）生成有效的 Prompt，且每个 Prompt 都包含 JSON 格式要求。

**Validates: Requirements 1.1, 1.6**

### Property 2: Token 消耗范围约束

*对于任何* 上下文数据和任何预设模式，生成的 Prompt 的 token 消耗应该在该模式指定的范围内（极简：100-150，标准：200-300，增强：300-500）。

**Validates: Requirements 1.2, 1.3, 1.4**

### Property 3: 自定义模板往返一致性

*对于任何* 有效的自定义 Prompt 模板字符串，保存后再读取应该得到相同的模板内容。

**Validates: Requirements 1.5**

### Property 4: 检测结果数据结构完整性

*对于任何* 评论，AI_Detector 返回的结果应该包含 is_spam（布尔值）、confidence（0-1 范围的浮点数）、reason（字符串）、suggestion（字符串）四个必需字段。

**Validates: Requirements 2.1, 2.2, 3.1**

### Property 5: 置信度分类正确性

*对于任何* 置信度值，系统应该根据以下规则正确分类：>= 0.9 为"非常确定"，0.7-0.9 为"比较确定"，0.5-0.7 为"中等确定"，< 0.5 为"不太确定"。

**Validates: Requirements 2.3, 2.4, 2.5, 2.6**

### Property 6: 处理建议逻辑正确性

*对于任何* 检测结果和阈值配置，当 confidence >= threshold 且 is_spam = true 时应返回 "auto"，当 0.5 <= confidence < threshold 且 is_spam = true 时应返回 "review"，其他情况应返回 "approve"。

**Validates: Requirements 3.2, 3.3, 3.4**

### Property 7: 阈值配置往返一致性

*对于任何* 有效的阈值值（0.5-1.0），保存后再读取应该得到相同的阈值。

**Validates: Requirements 3.5**

### Property 8: 评论处理状态正确性

*对于任何* 评论和处理建议，当 suggestion = "auto" 时评论应被标记为垃圾，当 suggestion = "review" 时评论应被标记为待审核，当 suggestion = "approve" 时评论应被正常发布。

**Validates: Requirements 3.6, 3.7, 3.8**

### Property 9: 上下文数据完整性

*对于任何* 评论，Context_Builder 构建的上下文应该包含文章标题、文章摘要、用户历史评论数、用户通过率、评论时间戳、IP 地址等所有必需字段。

**Validates: Requirements 4.1, 4.2, 4.3**

### Property 10: 上下文传递正确性

*对于任何* 构建的上下文，生成的 Prompt 应该包含该上下文中的关键信息（如文章标题、评论内容等）。

**Validates: Requirements 4.4**

### Property 11: 敏感信息脱敏正确性

*对于任何* 包含敏感信息的评论，Context_Builder 返回的上下文中的邮箱应只保留域名，IP 地址应只保留前两段。

**Validates: Requirements 4.5, 10.1, 10.2**

### Property 12: 摘要截取正确性

*对于任何* 超过 200 字符的文章摘要，Context_Builder 返回的摘要应该被截取为 200 字符。

**Validates: Requirements 4.6**

### Property 13: 反馈记录完整性

*对于任何* 管理员审核操作，Learning_Module 记录的反馈应该包含 AI 判断结果、管理员决策、时间戳、评论特征哈希等所有必需字段。

**Validates: Requirements 5.1, 5.2**

### Property 14: 误判率计算正确性

*对于任何* 反馈数据集，Learning_Module 计算的误判率应该等于（误判数量 / 总检测数量）。

**Validates: Requirements 5.3**

### Property 15: 优化建议触发正确性

*对于任何* 反馈数据集，当某类型评论的误判率超过 30% 时，Learning_Module 应该生成相应的优化建议。

**Validates: Requirements 5.4**

### Property 16: 反馈数据导出格式正确性

*对于任何* 反馈数据集，导出的 CSV 数据应该包含所有必需列（comment_id、ai_result、admin_action、timestamp 等），且格式符合 CSV 标准。

**Validates: Requirements 5.5**

### Property 17: 统计数据准确性

*对于任何* 反馈数据集，Learning_Module 返回的统计数据（总检测数、自动处理数、误判数）应该与实际数据一致。

**Validates: Requirements 5.6**

### Property 18: API 错误默认值正确性

*对于任何* API 错误响应，AI_Detector 应该使用默认值（is_spam=false, confidence=0, suggestion="approve"）并允许评论正常发布。

**Validates: Requirements 8.1, 8.2**

### Property 19: 自动禁用机制正确性

*对于任何* API 调用序列，当连续失败次数达到配置的阈值（默认 3 次）时，系统应该自动禁用实时检测指定时长（默认 1 小时）。

**Validates: Requirements 8.3**

### Property 20: 错误日志容量限制

*对于任何* 错误日志序列，系统应该只保留最近的 N 条（默认 10 条）错误日志。

**Validates: Requirements 8.4**

### Property 21: 自动恢复机制正确性

*对于任何* 被禁用的检测系统，当 API 调用成功时，系统应该自动重新启用实时检测。

**Validates: Requirements 8.5**

### Property 22: 手动恢复功能正确性

*对于任何* 被禁用的检测系统，调用手动恢复功能后，系统应该立即重新启用实时检测并清除错误计数。

**Validates: Requirements 8.6**

### Property 23: 异步检测非阻塞性

*对于任何* 评论提交，当异步检测启用时，评论提交操作应该在 API 调用完成前就返回成功响应。

**Validates: Requirements 9.1**

### Property 24: 状态更新正确性

*对于任何* 评论和 API 响应，当 API 返回结果后，评论的状态应该根据处理建议正确更新（auto → 垃圾/回收站，review → 待审核，approve → 已发布）。

**Validates: Requirements 9.3**

### Property 25: 批量扫描完整性

*对于任何* 评论 ID 列表，批量扫描功能应该对列表中的每个评论都执行检测，且返回的结果数量应该等于输入的评论数量。

**Validates: Requirements 9.4**

### Property 26: 队列限速正确性

*对于任何* 批量扫描操作，API 调用的频率应该不超过配置的速率限制（如每秒最多 N 次调用）。

**Validates: Requirements 9.5**

### Property 27: 缓存一致性

*对于任何* 用户邮箱，在缓存有效期内多次查询该用户的历史统计应该返回相同的结果，且只执行一次数据库查询。

**Validates: Requirements 9.6**

### Property 28: 隐私保护完整性

*对于任何* 评论和隐私级别配置，发送给 API 的数据不应包含用户的真实姓名、完整邮箱（标准模式）或任何用户标识信息（严格模式）。

**Validates: Requirements 10.3, 10.5**

### Property 29: 隐私级别配置往返一致性

*对于任何* 有效的隐私级别值（standard 或 strict），保存后再读取应该得到相同的配置。

**Validates: Requirements 10.4**

## Error Handling

### API 错误处理

1. **连接超时**：
   - 超时时间：30 秒
   - 处理：记录错误日志，使用默认值，允许评论发布
   - 重试：不自动重试，由自动禁用机制控制

2. **API 返回错误状态码**：
   - 4xx 错误：记录错误，使用默认值，不计入连续失败
   - 5xx 错误：记录错误，使用默认值，计入连续失败
   - 速率限制（429）：延迟重试，不计入连续失败

3. **响应格式错误**：
   - JSON 解析失败：记录错误，使用默认值
   - 缺少必需字段：记录警告，使用默认值填充
   - 字段类型错误：记录警告，尝试类型转换

4. **自动禁用机制**：
   - 触发条件：连续失败 N 次（默认 3 次）
   - 禁用时长：M 分钟（默认 60 分钟）
   - 恢复条件：时间到期或手动恢复或 API 调用成功
   - 通知：在管理后台显示禁用状态和原因

### 数据验证错误

1. **评论数据不完整**：
   - 缺少必需字段：记录警告，跳过检测
   - 字段格式错误：记录警告，尝试修复或跳过

2. **配置数据无效**：
   - 阈值超出范围：使用默认值 0.85
   - 模式不存在：使用默认模式 standard
   - 自定义模板格式错误：显示错误提示，不保存

3. **上下文构建失败**：
   - 文章不存在：使用空字符串
   - 用户历史查询失败：使用默认值（count=0, rate=0）
   - 数据库错误：记录错误，使用最小上下文

### 数据库错误

1. **反馈记录失败**：
   - 记录错误日志
   - 不影响评论处理流程
   - 在管理后台显示警告

2. **统计查询失败**：
   - 返回空数据或默认值
   - 在管理后台显示错误提示

3. **批量操作失败**：
   - 记录失败的评论 ID
   - 继续处理剩余评论
   - 在完成后显示失败列表

## Testing Strategy

### 测试方法

本项目采用双重测试策略：

1. **单元测试**：验证具体示例、边缘情况和错误条件
2. **属性测试**：验证通用属性在所有输入下的正确性

两种测试方法互补，共同保证系统的正确性和健壮性。

### 单元测试重点

单元测试应关注以下方面：

1. **具体示例**：
   - 典型的垃圾评论示例
   - 典型的正常评论示例
   - 边界值测试（置信度 0.5, 0.85, 0.9 等）

2. **边缘情况**：
   - 空评论内容
   - 超长评论内容
   - 特殊字符和 Unicode
   - 文章不存在
   - 用户无历史记录

3. **错误条件**：
   - API 超时
   - API 返回错误
   - 数据库连接失败
   - 配置数据无效

4. **集成点**：
   - WordPress 钩子集成
   - 评论状态更新
   - 管理后台显示

### 属性测试配置

**测试库选择**：
- PHP: PHPUnit + Eris (Property-Based Testing)
- 或使用 Pest + Pest Property Testing Plugin

**测试配置**：
- 每个属性测试最少运行 100 次迭代
- 使用随机种子确保可重现性
- 失败时自动缩小（shrinking）到最小失败案例

**属性测试标签格式**：
```php
/**
 * @test
 * Feature: ai-spam-detection-optimization, Property 1: Prompt 模式完整性
 */
public function test_prompt_mode_completeness() {
    // 属性测试实现
}
```

### 测试数据生成

**生成器定义**：

1. **评论生成器**：
   - 随机内容（1-1000 字符）
   - 随机作者名（1-50 字符）
   - 随机邮箱（有效格式）
   - 随机 URL（有效格式或空）
   - 随机 IP 地址

2. **上下文生成器**：
   - 随机文章标题（1-200 字符）
   - 随机文章摘要（0-500 字符）
   - 随机用户历史（count: 0-1000, rate: 0-1）

3. **配置生成器**：
   - 随机阈值（0.5-1.0）
   - 随机模式（minimal, standard, enhanced）
   - 随机隐私级别（standard, strict）

4. **API 响应生成器**：
   - 随机 is_spam（true/false）
   - 随机 confidence（0-1）
   - 随机 reason（1-200 字符）
   - 随机 suggestion（auto/review/approve）

### 测试覆盖率目标

- **代码覆盖率**：> 80%
- **分支覆盖率**：> 75%
- **属性测试覆盖**：所有 29 个正确性属性
- **单元测试覆盖**：所有核心函数和边缘情况

### 性能测试

1. **响应时间测试**：
   - 评论提交响应时间 < 100ms（异步模式）
   - 同步检测响应时间 < 3s
   - 批量扫描 100 条评论 < 5 分钟

2. **并发测试**：
   - 模拟 10 个并发评论提交
   - 验证无数据竞争和死锁

3. **负载测试**：
   - 批量扫描 1000 条评论
   - 验证内存使用 < 256MB
   - 验证数据库查询次数合理

### 集成测试

1. **WordPress 集成**：
   - 测试评论提交钩子
   - 测试评论状态更新
   - 测试管理后台显示

2. **API 集成**：
   - 测试 OpenAI API 调用
   - 测试自定义 API 端点
   - 测试错误处理

3. **数据库集成**：
   - 测试反馈记录存储
   - 测试统计数据查询
   - 测试批量操作

### 测试环境

1. **本地开发环境**：
   - PHP 7.4+
   - WordPress 5.8+
   - MySQL 5.7+
   - PHPUnit 9.5+

2. **CI/CD 环境**：
   - GitHub Actions 或类似 CI 工具
   - 自动运行所有测试
   - 代码覆盖率报告

3. **测试数据**：
   - 使用 WordPress Test Suite
   - 创建测试数据库
   - 使用 mock API 响应

### 测试执行顺序

1. **快速测试**（< 1 分钟）：
   - 单元测试
   - 快速属性测试（10 次迭代）

2. **完整测试**（< 10 分钟）：
   - 所有单元测试
   - 完整属性测试（100 次迭代）
   - 集成测试

3. **性能测试**（< 30 分钟）：
   - 响应时间测试
   - 并发测试
   - 负载测试

### 测试维护

1. **定期更新**：
   - 随着需求变化更新测试
   - 添加新发现的边缘情况
   - 优化慢速测试

2. **失败分析**：
   - 记录所有测试失败
   - 分析失败原因
   - 修复或更新测试

3. **覆盖率监控**：
   - 定期检查覆盖率报告
   - 识别未覆盖的代码
   - 添加缺失的测试

