Files
whale-town/tests/TEST_GUIDE.md
2025-12-05 19:00:14 +08:00

169 lines
4.5 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.
# 测试指南
## 🎯 测试概览
本项目包含完整的测试套件,覆盖核心系统功能。
### 测试类型
- **属性测试**:使用随机数据验证通用属性(每个测试 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 # 本文档
```