kards-env/tests/test_api_consistency.py

137 lines
4.8 KiB
Python
Raw Permalink Normal View History

2025-09-05 17:05:43 +08:00
#!/usr/bin/env python3
"""
API一致性验证测试
验证所有修复后的API调用是否正常工作
"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from kards_battle.core.battle_engine import BattleEngine
from kards_battle.core.enums import LineType
from kards_battle.examples.sample_units import create_german_infantry, create_american_gi
def test_api_consistency():
"""测试API一致性"""
print("\n🔍 API一致性验证测试")
print("=" * 40)
# 创建引擎
engine = BattleEngine("Germany", "USA", debug_mode=True)
# 创建单位
german_unit = create_german_infantry()
american_unit = create_american_gi()
german_unit.stats.operation_cost = 1
american_unit.stats.operation_cost = 1
test_results = []
# 测试1: 部署API使用整数player_id
try:
result1 = engine.deploy_unit_to_support(german_unit, 0)
result2 = engine.deploy_unit_to_support(american_unit, 1)
deploy_success = result1.get('success', False) and result2.get('success', False)
test_results.append(("部署API", deploy_success))
print(f"✅ 部署API测试: {'通过' if deploy_success else '失败'}")
except Exception as e:
test_results.append(("部署API", False))
print(f"❌ 部署API测试失败: {e}")
# 测试2: 移动API使用整数player_id
try:
# 等待到下一回合,这样单位就能移动了
engine.end_turn() # 切换到美军
engine.end_turn() # 切换回德军(新回合)
engine.debug_set_kredits(0, kredits=10)
result3 = engine.move_unit(german_unit.id, (LineType.FRONT, 0), 0)
move_success = result3.get('success', False)
test_results.append(("移动API", move_success))
if move_success:
print("✅ 移动API测试: 通过")
else:
print(f"❌ 移动API测试失败: {result3.get('reason', 'Unknown')}")
except Exception as e:
test_results.append(("移动API", False))
print(f"❌ 移动API测试异常: {e}")
# 测试3: 攻击API使用整数player_id
try:
engine.end_turn() # 切换到美军
engine.debug_set_kredits(1, kredits=10)
result4 = engine.attack_target(american_unit.id, german_unit.id, 1)
attack_success = result4.get('success', False)
test_results.append(("攻击API", attack_success))
print(f"✅ 攻击API测试: {'通过' if attack_success else '失败'}")
except Exception as e:
test_results.append(("攻击API", False))
print(f"❌ 攻击API测试失败: {e}")
# 测试4: 回合管理API
try:
result5 = engine.end_turn()
turn_success = result5.get('turn_ended', False)
test_results.append(("回合管理API", turn_success))
if turn_success:
print("✅ 回合管理API测试: 通过")
else:
print(f"❌ 回合管理API测试失败: {result5.get('reason', 'Unknown')}")
except Exception as e:
test_results.append(("回合管理API", False))
print(f"❌ 回合管理API测试异常: {e}")
# 测试5: 资源管理API使用整数player_id
try:
kredits_p1 = engine.get_kredits(0)
kredits_p2 = engine.get_kredits(1)
slot_p1 = engine.get_kredits_slot(0)
slot_p2 = engine.get_kredits_slot(1)
resource_success = all([
isinstance(kredits_p1, int),
isinstance(kredits_p2, int),
isinstance(slot_p1, int),
isinstance(slot_p2, int)
])
test_results.append(("资源管理API", resource_success))
print(f"✅ 资源管理API测试: {'通过' if resource_success else '失败'}")
except Exception as e:
test_results.append(("资源管理API", False))
print(f"❌ 资源管理API测试失败: {e}")
# 汇总结果
print("\n📊 测试结果汇总:")
print("-" * 40)
total_tests = len(test_results)
passed_tests = sum(1 for _, success in test_results if success)
for test_name, success in test_results:
status = "✅ 通过" if success else "❌ 失败"
print(f"{test_name}: {status}")
overall_success = passed_tests == total_tests
print(f"\n总体结果: {passed_tests}/{total_tests} 通过")
print(f"{'🎉 所有API一致性测试通过!' if overall_success else '❌ 部分API测试失败'}")
assert overall_success, f"API consistency test failed: {passed_tests}/{total_tests} passed"
if __name__ == "__main__":
try:
test_api_consistency()
print("✅ All tests passed!")
except AssertionError as e:
print(f"{e}")
sys.exit(1)