# OAuth-DB CLI 测试文档
## 测试概览
OAuth-DB CLI 包含全面的端到端(E2E)测试套件,确保所有功能正常工作。
### 测试统计
- **总测试数**: 23 个
- **通过**: 19 个
- **忽略**: 4 个(需要真实后端服务器)
- **测试文件**: 3 个
## 测试分类
### 1. 认证测试 (e2e_auth.rs)
测试用户认证和账户管理功能。
#### 已实现的测试
- ✅ `test_logout_success` - 测试登出功能
- ✅ `test_whoami_not_logged_in` - 测试未登录时的 whoami 命令
- ✅ `test_accounts_list` - 测试账户列表显示
- ✅ `test_accounts_list_empty` - 测试空账户列表
- ✅ `test_accounts_switch` - 测试账户切换
- ✅ `test_accounts_switch_not_found` - 测试切换到不存在的账户
- ✅ `test_accounts_remove` - 测试删除账户
- ✅ `test_accounts_remove_not_found` - 测试删除不存在的账户
- ✅ `test_multiple_accounts_workflow` - 测试多账户工作流
- ✅ `test_account_persistence` - 测试账户持久化
#### 需要后端服务器的测试(已忽略)
- 🔶 `test_login_success` - 测试成功登录
- 🔶 `test_whoami` - 测试 whoami 命令
- 🔶 `test_login_invalid_credentials` - 测试无效凭证登录
- 🔶 `test_login_custom_server` - 测试自定义服务器登录
### 2. 基础功能测试 (e2e_basic.rs)
测试 CLI 的基本命令和帮助信息。
- ✅ `test_version` - 测试版本显示
- ✅ `test_help` - 测试帮助信息
- ✅ `test_invalid_command` - 测试无效命令处理
- ✅ `test_user_help` - 测试用户命令帮助
- ✅ `test_user_create_help` - 测试用户创建帮助
- ✅ `test_app_help` - 测试应用命令帮助
- ✅ `test_app_create_help` - 测试应用创建帮助
- ✅ `test_admin_help` - 测试管理员命令帮助
### 3. 配置管理测试 (e2e_config.rs)
测试配置文件的读写和管理。
- ✅ `test_config_list_default` - 测试列出默认配置
- ✅ `test_config_get_server_url` - 测试获取服务器 URL
- ✅ `test_config_set_output_format` - 测试设置输出格式
- ✅ `test_config_reset` - 测试重置配置
- ✅ `test_config_get_nonexistent_key` - 测试获取不存在的配置键
## 运行测试
### 运行所有测试
```bash
cargo test -p oauth-db-cli
```
### 运行特定测试文件
```bash
# 认证测试
cargo test --test e2e_auth
# 基础功能测试
cargo test --test e2e_basic
# 配置管理测试
cargo test --test e2e_config
```
### 运行单个测试
```bash
cargo test --test e2e_auth test_accounts_list
```
### 包含被忽略的测试
```bash
# 需要先启动后端服务器
cargo test --test e2e_auth -- --ignored
```
## 测试架构
### 测试隔离
- **配置隔离**: 认证测试使用全局互斥锁 (`CONFIG_LOCK`) 确保测试不会相互干扰
- **串行执行**: 使用 `#[serial]` 标记确保测试按顺序执行
- **配置备份**: 每个测试前备份现有配置,测试后恢复
### 测试辅助工具
#### TestContext (helpers.rs)
提供测试环境管理:
- 创建临时测试目录
- 生成测试配置文件
- 管理测试账户
- 自动清理
#### 配置管理函数
- `get_real_config_dir()` - 获取真实配置目录
- `backup_config()` - 备份现有配置
- `restore_config()` - 恢复配置
## 测试覆盖范围
### 已覆盖的功能
✅ 用户认证(登录/登出)
✅ 账户管理(列表/切换/删除)
✅ 配置管理(读取/设置/重置)
✅ 命令行界面(帮助/版本)
✅ 错误处理(无效命令/不存在的资源)
✅ 多账户支持
✅ 配置持久化
### 待添加的测试
- 应用管理测试(创建/列表/删除应用)
- 用户管理测试(创建/列表/删除用户)
- 平台管理测试(创建/列表/删除平台)
- 输出格式测试(JSON/YAML/表格)
- 颜色输出测试
- 日志级别测试
## 持续集成
测试可以在 CI/CD 环境中运行:
```bash
# 只运行不需要后端的测试
cargo test -p oauth-db-cli
# 如果有后端服务器,运行所有测试
cargo test -p oauth-db-cli -- --include-ignored
```
## 故障排查
### 测试失败:配置文件冲突
如果测试失败并提示配置文件问题:
1. 确保没有其他测试同时运行
2. 检查配置目录权限
3. 手动清理配置目录:`rm -rf ~/.config/oauth-db-cli/`
### 测试超时
某些测试可能需要更长时间:
```bash
cargo test -p oauth-db-cli -- --test-threads=1
```
## 贡献指南
添加新测试时:
1. 在适当的测试文件中添加测试函数
2. 使用 `#[tokio::test]` 和 `#[serial]` 标记
3. 如果需要后端服务器,添加 `#[ignore]` 标记
4. 使用 `CONFIG_LOCK` 保护配置文件访问
5. 确保测试后清理资源
6. 更新本文档
## 测试最佳实践
1. **独立性**: 每个测试应该独立运行,不依赖其他测试
2. **清理**: 测试后清理所有创建的资源
3. **明确性**: 测试名称应清楚描述测试内容
4. **完整性**: 测试应验证所有相关的输出和副作用
5. **可维护性**: 使用辅助函数减少重复代码