Files
NeoBot/test_plugin_error.py
K2cr2O1 8508fc95f5 feat: 添加测试覆盖率并修复相关问题
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%(忽略插件)
2026-01-09 23:18:58 +08:00

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()