147 lines
3.8 KiB
Markdown
147 lines
3.8 KiB
Markdown
|
|
# KARDS Battle System - Testing Guide
|
|||
|
|
|
|||
|
|
## 📋 测试概述
|
|||
|
|
|
|||
|
|
项目包含全面的pytest测试套件,确保所有核心功能的正确性和稳定性。
|
|||
|
|
|
|||
|
|
## 🧪 测试套件
|
|||
|
|
|
|||
|
|
### 移动系统测试 (`test_comprehensive_movement.py`)
|
|||
|
|
涵盖所有移动场景和边界条件:
|
|||
|
|
|
|||
|
|
**成功场景:**
|
|||
|
|
- ✅ 移向空的前线占领前线
|
|||
|
|
- ✅ 移向有己方的前线,进入空格
|
|||
|
|
- ✅ 移向有己方的前线,挤占已有位置
|
|||
|
|
- ✅ 移动消耗正确的Kredits
|
|||
|
|
|
|||
|
|
**失败场景:**
|
|||
|
|
- ❌ 前线移向敌方阵线(应失败)
|
|||
|
|
- ❌ 前线已满时移向前线(应失败)
|
|||
|
|
- ❌ 前线有敌人时移向前线空地(应失败)
|
|||
|
|
- ❌ 前线单位不能在前线内移动
|
|||
|
|
- ❌ Kredits不足时移动失败
|
|||
|
|
- ❌ 非当前回合无法移动
|
|||
|
|
|
|||
|
|
### 回合流逝和资源系统测试 (`test_turn_and_resources.py`)
|
|||
|
|
验证资源管理和回合机制:
|
|||
|
|
|
|||
|
|
**资源系统:**
|
|||
|
|
- ✅ 随回合Slots增加,Kredits补满
|
|||
|
|
- ✅ Kredits Slot达到12时不再自动增加
|
|||
|
|
- ✅ Kredits超过24时自动设为24(绝对上限)
|
|||
|
|
- ✅ 每回合Kredits重置为Slot数值
|
|||
|
|
|
|||
|
|
**回合系统:**
|
|||
|
|
- ✅ 回合阶段正确轮换 (0→1→0→1...)
|
|||
|
|
- ✅ 双方在各自阶段都获得正确资源
|
|||
|
|
- ✅ 正确扣除和验证Kredits
|
|||
|
|
|
|||
|
|
## 🚀 运行测试
|
|||
|
|
|
|||
|
|
### 方法一:使用提供的脚本
|
|||
|
|
```bash
|
|||
|
|
# 运行所有pytest测试
|
|||
|
|
./run_pytest.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法二:直接使用uv
|
|||
|
|
```bash
|
|||
|
|
# 运行移动系统测试
|
|||
|
|
uv run pytest tests/test_comprehensive_movement.py -v
|
|||
|
|
|
|||
|
|
# 运行回合和资源测试
|
|||
|
|
uv run pytest tests/test_turn_and_resources.py -v
|
|||
|
|
|
|||
|
|
# 运行所有新测试
|
|||
|
|
uv run pytest tests/test_comprehensive_movement.py tests/test_turn_and_resources.py -v
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法三:运行特定测试
|
|||
|
|
```bash
|
|||
|
|
# 运行单个测试方法
|
|||
|
|
uv run pytest tests/test_comprehensive_movement.py::TestMovementScenarios::test_move_to_empty_frontline_occupies_control -v
|
|||
|
|
|
|||
|
|
# 运行特定测试类
|
|||
|
|
uv run pytest tests/test_turn_and_resources.py::TestTurnProgression -v
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 测试统计
|
|||
|
|
|
|||
|
|
| 测试套件 | 测试数量 | 状态 |
|
|||
|
|
|---------|----------|------|
|
|||
|
|
| 移动系统测试 | 10个 | ✅ 全部通过 |
|
|||
|
|
| 回合和资源系统测试 | 9个 | ✅ 全部通过 |
|
|||
|
|
| **总计** | **19个** | **✅ 全部通过** |
|
|||
|
|
|
|||
|
|
## 🔧 环境要求
|
|||
|
|
|
|||
|
|
项目使用uv管理Python环境和依赖:
|
|||
|
|
|
|||
|
|
```toml
|
|||
|
|
[project]
|
|||
|
|
dependencies = [
|
|||
|
|
"pytest>=8.4.1",
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 首次设置
|
|||
|
|
```bash
|
|||
|
|
# 创建虚拟环境并安装依赖
|
|||
|
|
uv add pytest
|
|||
|
|
|
|||
|
|
# 验证环境
|
|||
|
|
uv run pytest --version
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📝 测试编写指南
|
|||
|
|
|
|||
|
|
### 测试文件命名
|
|||
|
|
- 文件名:`test_*.py`
|
|||
|
|
- 类名:`Test*`
|
|||
|
|
- 方法名:`test_*`
|
|||
|
|
|
|||
|
|
### 测试结构示例
|
|||
|
|
```python
|
|||
|
|
class TestFeatureName:
|
|||
|
|
def setup_method(self):
|
|||
|
|
"""每个测试前的设置"""
|
|||
|
|
self.engine = BattleEngine("Germany", "USA", debug_mode=True)
|
|||
|
|
|
|||
|
|
def test_specific_behavior(self):
|
|||
|
|
"""测试:具体行为描述"""
|
|||
|
|
# Arrange - 准备测试数据
|
|||
|
|
unit = create_german_infantry()
|
|||
|
|
|
|||
|
|
# Act - 执行被测试的操作
|
|||
|
|
result = self.engine.deploy_unit_to_support(unit, 0)
|
|||
|
|
|
|||
|
|
# Assert - 验证结果
|
|||
|
|
assert result['success']
|
|||
|
|
assert result['position'] == 1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 调试技巧
|
|||
|
|
```python
|
|||
|
|
# 使用debug模式创建引擎
|
|||
|
|
engine = BattleEngine("Germany", "USA", debug_mode=True)
|
|||
|
|
|
|||
|
|
# 设置测试资源
|
|||
|
|
engine.debug_set_kredits(0, kredits=10)
|
|||
|
|
|
|||
|
|
# 查看战场状态
|
|||
|
|
print(engine.battlefield)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 覆盖的核心功能
|
|||
|
|
|
|||
|
|
测试套件验证了以下核心系统:
|
|||
|
|
|
|||
|
|
1. **战场系统**:3线布局、单位位置、前线控制
|
|||
|
|
2. **移动系统**:所有移动规则和限制条件
|
|||
|
|
3. **资源系统**:Kredits Slot增长、Kredits消耗和限制
|
|||
|
|
4. **回合系统**:阶段轮换、资源重置
|
|||
|
|
5. **权限系统**:回合权限、操作验证
|
|||
|
|
6. **边界条件**:各种失败场景和错误处理
|
|||
|
|
|
|||
|
|
这确保了系统的健壮性和可靠性。
|