refactor(redis_manager): 移除冗余的ConnectionError处理 refactor(event_handler): 优化Bot类型注解 refactor(factory): 移除未使用的GroupCardNoticeEvent test: 添加全面的单元测试覆盖 - 添加test_import.py测试模块导入 - 添加test_debug.py测试插件加载调试 - 添加test_plugin_error.py测试错误处理 - 添加test_config_loader.py测试配置加载 - 添加test_redis_manager.py测试Redis管理 - 添加test_bot.py测试Bot功能 - 扩展test_models.py测试消息模型 - 添加test_plugin_manager_coverage.py测试插件管理 - 添加test_executor.py测试代码执行器 - 添加test_ws.py测试WebSocket - 添加test_api.py测试API接口 - 添加test_core_managers.py测试核心管理模块 fix(plugin_manager): 修复插件加载日志变量问题 覆盖率已到达86%(忽略插件)
55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
import sys
|
|
import os
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
# 添加项目根目录到Python路径
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
# 导入插件管理器
|
|
from core.managers.plugin_manager import PluginManager
|
|
|
|
# 创建测试用例
|
|
def test_plugin_error_handling():
|
|
# 创建命令管理器模拟
|
|
mock_command_manager = MagicMock()
|
|
mock_command_manager.plugins = {}
|
|
|
|
# 创建插件管理器
|
|
pm = PluginManager(mock_command_manager)
|
|
|
|
# 模拟导入错误
|
|
def import_side_effect(name, *args, **kwargs):
|
|
if name == "plugins.bad_plugin":
|
|
raise Exception("Load error")
|
|
mock_module = MagicMock()
|
|
mock_module.__plugin_meta__ = {"name": "Test Plugin"}
|
|
return mock_module
|
|
|
|
# 打桩
|
|
with patch("pkgutil.iter_modules") as mock_iter, \
|
|
patch("importlib.import_module", side_effect=import_side_effect), \
|
|
patch("os.path.exists", return_value=True), \
|
|
patch("core.managers.plugin_manager.logger") as mock_logger:
|
|
|
|
mock_iter.return_value = [(None, "bad_plugin", False)]
|
|
|
|
# 执行加载
|
|
pm.load_all_plugins()
|
|
|
|
# 验证
|
|
assert "plugins.bad_plugin" not in pm.loaded_plugins
|
|
print(f"DEBUG: mock_logger.exception.called: {mock_logger.exception.called}")
|
|
print(f"DEBUG: mock_logger.error.called: {mock_logger.error.called}")
|
|
print(f"DEBUG: mock_logger method calls: {mock_logger.method_calls}")
|
|
|
|
# 检查是否调用了日志
|
|
if mock_logger.exception.called:
|
|
print("SUCCESS: logger.exception was called")
|
|
elif mock_logger.error.called:
|
|
print("SUCCESS: logger.error was called")
|
|
else:
|
|
print("ERROR: No logger method was called!")
|
|
|
|
# 运行测试
|
|
if __name__ == "__main__":
|
|
test_plugin_error_handling() |