blenderpython/suw_core/test/test_fixed_stats.py

141 lines
4.7 KiB
Python
Raw Normal View History

2025-08-01 17:13:30 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试修复后的统计方法
"""
import sys
import os
# 添加项目路径
current_dir = os.path.dirname(__file__)
suw_core_dir = os.path.dirname(current_dir)
blenderpython_dir = os.path.dirname(suw_core_dir)
sys.path.insert(0, blenderpython_dir)
def test_all_stats():
"""测试所有统计方法"""
print("📊 测试修复后的统计方法...")
try:
from suw_core import get_all_stats
stats = get_all_stats()
print(f"\n📋 get_all_stats 返回 {len(stats)} 个统计项:")
success_count = 0
for name, stat in stats.items():
if name == 'module_version':
print(f"{name}: {stat}")
success_count += 1
elif stat and isinstance(stat, dict) and 'manager_type' in stat:
manager_type = stat['manager_type']
error = stat.get('error')
if error:
print(f"⚠️ {name}: {manager_type} (有错误: {error})")
else:
print(f"{name}: {manager_type}")
success_count += 1
elif stat and isinstance(stat, dict):
print(f"⚠️ {name}: 有数据但缺少 manager_type")
elif stat:
print(f"⚠️ {name}: 格式不标准 ({type(stat)})")
else:
print(f"{name}: 无数据")
print(
f"\n📈 统计方法成功率: {success_count}/{len(stats)} ({success_count/len(stats)*100:.1f}%)")
return success_count >= len(stats) * 0.8 # 80% 成功算合格
except Exception as e:
print(f"❌ 统计测试失败: {e}")
import traceback
traceback.print_exc()
return False
def test_individual_managers():
"""测试单个管理器的统计方法"""
print("\n🔍 测试单个管理器...")
try:
# 初始化所有管理器
from suw_core import init_all_managers
class MockSUWImpl:
def __init__(self):
self.parts = {}
self.zones = {}
mock_suw_impl = MockSUWImpl()
managers = init_all_managers(mock_suw_impl)
# 测试每个管理器的统计方法
manager_tests = [
('material_manager', 'get_material_stats'),
('part_creator', 'get_part_creator_stats'),
('machining_manager', 'get_machining_stats'),
('selection_manager', 'get_selection_stats'),
('deletion_manager', 'get_deletion_stats'),
('hardware_manager', 'get_hardware_stats'),
('door_drawer_manager', 'get_door_drawer_stats'),
('dimension_manager', 'get_dimension_stats'),
('command_dispatcher', 'get_dispatcher_stats'),
]
success_count = 0
for manager_name, stats_method in manager_tests:
manager = managers.get(manager_name)
if manager and hasattr(manager, stats_method):
try:
stats = getattr(manager, stats_method)()
if isinstance(stats, dict) and 'manager_type' in stats:
print(f"{manager_name}: {stats['manager_type']}")
success_count += 1
else:
print(f"⚠️ {manager_name}: 方法存在但格式不对")
except Exception as e:
print(f"{manager_name}: 方法调用失败 - {e}")
else:
print(f"{manager_name}: 管理器不存在或缺少统计方法")
print(f"\n📈 单个管理器测试: {success_count}/{len(manager_tests)} 成功")
return success_count >= len(manager_tests) * 0.8
except Exception as e:
print(f"❌ 单个管理器测试失败: {e}")
return False
def main():
"""主测试函数"""
print("🚀 测试修复后的统计方法...")
print("="*60)
# 1. 测试全局统计
all_stats_ok = test_all_stats()
# 2. 测试单个管理器
individual_ok = test_individual_managers()
print("\n" + "="*60)
print("📋 修复验证总结:")
print(f" 全局统计: {'✅ 正常' if all_stats_ok else '❌ 有问题'}")
print(f" 单个管理器: {'✅ 正常' if individual_ok else '❌ 有问题'}")
if all_stats_ok and individual_ok:
print("\n🎉 统计方法修复验证成功!")
print("💡 现在可以在客户端中运行 show_module_status() 查看完整状态")
return True
else:
print("\n⚠️ 还有统计方法需要修复")
return False
if __name__ == "__main__":
main()