169 lines
4.5 KiB
Markdown
169 lines
4.5 KiB
Markdown
# 测试指南
|
||
|
||
## 🎯 测试概览
|
||
|
||
本项目包含完整的测试套件,覆盖核心系统功能。
|
||
|
||
### 测试类型
|
||
- **属性测试**:使用随机数据验证通用属性(每个测试 50-100 次迭代)
|
||
- **单元测试**:验证特定功能和边界情况
|
||
- **集成测试**:测试系统间的交互
|
||
|
||
## 快速测试
|
||
|
||
### 运行所有测试(推荐)
|
||
|
||
1. 在 Godot 编辑器中打开 `tests/RunAllTests.tscn`
|
||
2. 按 **F6** 运行当前场景
|
||
3. 查看控制台输出,所有测试应该显示 ✅ PASSED
|
||
4. 测试完成后窗口会自动关闭
|
||
|
||
### 运行单个测试
|
||
|
||
**消息协议测试**:
|
||
- 打开 `tests/TestRunner.tscn`
|
||
- 按 F6
|
||
- 预期输出:
|
||
```
|
||
[Property Test] Serialization Roundtrip
|
||
Result: 100/100 passed
|
||
✅ PASSED
|
||
[Unit Test] Message Creation
|
||
✅ PASSED
|
||
[Unit Test] Message Validation
|
||
✅ PASSED
|
||
```
|
||
|
||
**游戏状态管理器测试**:
|
||
- 打开 `tests/TestGameStateManager.tscn`
|
||
- 按 F6
|
||
- 预期输出:
|
||
```
|
||
[Unit Test] Initial State
|
||
✅ PASSED
|
||
[Unit Test] State Transitions
|
||
✅ PASSED
|
||
[Unit Test] State Change Signal
|
||
✅ PASSED
|
||
[Unit Test] Data Persistence
|
||
✅ PASSED
|
||
[Unit Test] Data Serialization
|
||
✅ PASSED
|
||
```
|
||
|
||
**角色数据测试**:
|
||
- 打开 `tests/TestCharacterData.tscn`
|
||
- 按 F6
|
||
- 预期输出:
|
||
```
|
||
[Property Test] Character ID Uniqueness
|
||
Result: 100 characters created, 100 unique IDs
|
||
✅ PASSED
|
||
[Unit Test] Character Creation
|
||
✅ PASSED
|
||
[Unit Test] Name Validation
|
||
✅ PASSED
|
||
[Unit Test] Data Validation
|
||
✅ PASSED
|
||
[Unit Test] Position Operations
|
||
✅ PASSED
|
||
[Unit Test] Serialization Roundtrip
|
||
✅ PASSED
|
||
```
|
||
|
||
## 测试主游戏场景
|
||
|
||
运行主场景查看基础系统初始化:
|
||
|
||
1. 打开 `scenes/Main.tscn`
|
||
2. 按 **F5** 运行项目
|
||
3. 预期控制台输出:
|
||
```
|
||
NetworkManager initialized
|
||
GameStateManager initialized
|
||
Initial state: LOGIN
|
||
No saved player data found
|
||
AI Town Game - Main scene loaded
|
||
Godot version: 4.5.1-stable
|
||
Initializing game systems...
|
||
```
|
||
|
||
## 测试覆盖
|
||
|
||
### 已测试的功能
|
||
|
||
✅ **消息协议** (test_message_protocol.gd)
|
||
- 属性测试:数据序列化往返(100次迭代)
|
||
- 单元测试:消息创建(所有类型)
|
||
- 单元测试:消息验证
|
||
|
||
✅ **游戏状态管理** (test_game_state_manager.gd)
|
||
- 单元测试:初始状态
|
||
- 单元测试:状态转换(LOGIN → CHARACTER_CREATION → IN_GAME → DISCONNECTED)
|
||
- 单元测试:状态变化信号
|
||
- 单元测试:数据持久化(保存/加载)
|
||
- 单元测试:JSON 序列化
|
||
|
||
✅ **角色数据模型** (test_character_data.gd)
|
||
- 属性测试:角色 ID 唯一性(100次迭代)
|
||
- 单元测试:角色创建
|
||
- 单元测试:名称验证(长度、空白检查)
|
||
- 单元测试:数据验证
|
||
- 单元测试:位置操作
|
||
- 单元测试:序列化往返
|
||
|
||
✅ **角色控制器** (test_character_controller.gd)
|
||
- 属性测试:碰撞检测(100次迭代)
|
||
- 属性测试:位置更新同步(100次迭代)
|
||
- 属性测试:角色移动能力(100次迭代)
|
||
|
||
✅ **输入处理器** (test_input_handler.gd)
|
||
- 属性测试:设备类型检测(100次迭代)
|
||
- 单元测试:键盘输入响应
|
||
- 单元测试:输入信号
|
||
|
||
### 测试统计
|
||
|
||
- **测试套件**: 5 个
|
||
- **属性测试**: 6 个(各 100 次迭代)
|
||
- **单元测试**: 18 个
|
||
- **总测试迭代**: 600+ 次
|
||
|
||
## 故障排除
|
||
|
||
### 如果测试失败
|
||
|
||
1. **检查控制台输出**:查找 "FAILED" 或 "Assertion failed" 消息
|
||
2. **查看错误详情**:失败的测试会显示具体的断言信息
|
||
3. **重新运行**:某些测试(如 ID 唯一性)使用随机数,可以重新运行确认
|
||
|
||
### 常见问题
|
||
|
||
**Q: 看不到测试输出?**
|
||
A: 确保 Godot 的输出面板是打开的(视图 → 输出)
|
||
|
||
**Q: 测试运行后立即关闭?**
|
||
A: 这是正常的,查看输出面板的历史记录
|
||
|
||
**Q: 某个测试一直失败?**
|
||
A: 检查该测试文件的代码,可能需要调整
|
||
|
||
## 下一步
|
||
|
||
测试通过后,你可以:
|
||
|
||
1. **游戏测试**:运行 `scenes/TestGameplay.tscn` 测试游戏功能
|
||
2. **启动服务器**:`cd server && yarn dev` 启动多人服务器
|
||
3. **继续开发**:参考 `.kiro/specs/godot-ai-town-game/tasks.md`
|
||
|
||
## 测试文件位置
|
||
|
||
```
|
||
tests/
|
||
├── RunAllTests.tscn # 运行所有测试
|
||
├── RunPropertyTests.tscn # 运行属性测试
|
||
├── TestGameplay.tscn # 游戏功能测试
|
||
├── test_*.gd # 测试脚本
|
||
└── TEST_GUIDE.md # 本文档
|
||
```
|