kards-env/tests/test_api_consistency.py

137 lines
4.8 KiB
Python
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.

#!/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)