创建新工程

This commit is contained in:
moyin
2025-12-05 19:00:14 +08:00
commit ff4fa5fffd
227 changed files with 32804 additions and 0 deletions

168
tests/TEST_GUIDE.md Normal file
View File

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