08ea5fbe98
添加用户管理视图、API和状态管理文件
137 lines
5.7 KiB
Python
137 lines
5.7 KiB
Python
import pytest
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
from unittest.mock import patch, MagicMock
|
|
from apitest.config.config_manager import ConfigManager
|
|
from apitest.config.logger_manager import LoggerManager
|
|
|
|
|
|
class TestLoggerManager:
|
|
"""测试LoggerManager日志管理器"""
|
|
|
|
@pytest.fixture
|
|
def mock_config_manager(self):
|
|
"""模拟配置管理器"""
|
|
config_manager = MagicMock(spec=ConfigManager)
|
|
config_manager.get_log_level.return_value = "INFO"
|
|
config_manager.get_log_format.return_value = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
config_manager.get_log_file.return_value = None
|
|
return config_manager
|
|
|
|
@pytest.fixture
|
|
def logger_manager(self, mock_config_manager):
|
|
"""创建日志管理器实例"""
|
|
return LoggerManager(mock_config_manager)
|
|
|
|
def test_logger_manager_initialization(self, mock_config_manager):
|
|
"""测试日志管理器初始化"""
|
|
logger_manager = LoggerManager(mock_config_manager)
|
|
assert logger_manager.config_manager == mock_config_manager
|
|
assert isinstance(logger_manager._loggers, dict)
|
|
|
|
@pytest.fixture
|
|
def mock_config_manager_with_file(self, tmp_path):
|
|
"""模拟带日志文件的配置管理器"""
|
|
config_manager = MagicMock(spec=ConfigManager)
|
|
config_manager.get_log_level.return_value = "DEBUG"
|
|
config_manager.get_log_format.return_value = "%(name)s - %(levelname)s - %(message)s"
|
|
config_manager.get_log_file.return_value = tmp_path / "test.log"
|
|
return config_manager
|
|
|
|
def test_logger_manager_with_file(self, mock_config_manager_with_file):
|
|
"""测试带日志文件的日志管理器初始化"""
|
|
logger_manager = LoggerManager(mock_config_manager_with_file)
|
|
assert logger_manager.config_manager == mock_config_manager_with_file
|
|
|
|
def test_get_logger(self, logger_manager):
|
|
"""测试获取日志记录器"""
|
|
logger = logger_manager.get_logger("test_logger")
|
|
assert isinstance(logger, logging.Logger)
|
|
assert logger.name == "test_logger"
|
|
assert "test_logger" in logger_manager._loggers
|
|
|
|
def test_get_logger_cached(self, logger_manager):
|
|
"""测试获取缓存的日志记录器"""
|
|
logger1 = logger_manager.get_logger("test_logger")
|
|
logger2 = logger_manager.get_logger("test_logger")
|
|
assert logger1 is logger2
|
|
|
|
def test_set_level(self, logger_manager):
|
|
"""测试设置日志级别"""
|
|
logger_manager.set_level("DEBUG")
|
|
root_logger = logging.getLogger()
|
|
assert root_logger.level == logging.DEBUG
|
|
|
|
def test_add_file_handler(self, logger_manager, tmp_path):
|
|
"""测试添加文件处理器"""
|
|
log_file = tmp_path / "test_add_handler.log"
|
|
|
|
initial_handler_count = len([h for h in logging.getLogger().handlers if isinstance(h, logging.FileHandler)])
|
|
|
|
logger_manager.add_file_handler(log_file)
|
|
|
|
root_logger = logging.getLogger()
|
|
file_handlers = [h for h in root_logger.handlers if isinstance(h, logging.FileHandler)]
|
|
assert len(file_handlers) > initial_handler_count
|
|
|
|
new_handlers = file_handlers[initial_handler_count:]
|
|
assert len(new_handlers) > 0
|
|
assert str(log_file) in new_handlers[0].baseFilename
|
|
|
|
def test_add_file_handler_with_level(self, logger_manager, tmp_path):
|
|
"""测试添加带级别的文件处理器"""
|
|
log_file = tmp_path / "test_add_handler_level.log"
|
|
|
|
initial_handler_count = len([h for h in logging.getLogger().handlers if isinstance(h, logging.FileHandler)])
|
|
|
|
logger_manager.add_file_handler(log_file, "ERROR")
|
|
|
|
root_logger = logging.getLogger()
|
|
file_handlers = [h for h in root_logger.handlers if isinstance(h, logging.FileHandler)]
|
|
assert len(file_handlers) > initial_handler_count
|
|
|
|
new_handlers = file_handlers[initial_handler_count:]
|
|
assert len(new_handlers) > 0
|
|
assert new_handlers[0].level == logging.ERROR
|
|
|
|
def test_remove_all_handlers(self, logger_manager):
|
|
"""测试移除所有处理器"""
|
|
original_handler_count = len(logging.getLogger().handlers)
|
|
logger_manager.remove_all_handlers()
|
|
assert len(logging.getLogger().handlers) == 0
|
|
|
|
@patch('apitest.config.logger_manager.setup_logger')
|
|
def test_setup_logger_function(self, mock_setup):
|
|
"""测试setup_logger函数"""
|
|
from apitest.config.logger_manager import setup_logger
|
|
mock_config = MagicMock(spec=ConfigManager)
|
|
setup_logger(mock_config)
|
|
mock_setup.assert_called_once_with(mock_config)
|
|
|
|
|
|
class TestSetupLoggerIntegration:
|
|
"""测试setup_logger集成"""
|
|
|
|
def test_setup_logger_creates_logger_manager(self):
|
|
"""测试setup_logger创建日志管理器"""
|
|
config_data = {
|
|
"logging": {
|
|
"level": "INFO",
|
|
"format": "%(name)s - %(levelname)s - %(message)s",
|
|
"file": None
|
|
}
|
|
}
|
|
|
|
with patch('apitest.config.config_manager.ConfigManager') as mock_config_class:
|
|
mock_config = MagicMock(spec=ConfigManager)
|
|
mock_config.get_log_level.return_value = "INFO"
|
|
mock_config.get_log_format.return_value = "%(name)s - %(levelname)s - %(message)s"
|
|
mock_config.get_log_file.return_value = None
|
|
mock_config_class.return_value = mock_config
|
|
|
|
from apitest.config.logger_manager import setup_logger
|
|
logger_manager = setup_logger(mock_config)
|
|
|
|
assert isinstance(logger_manager, LoggerManager)
|
|
assert logger_manager.config_manager == mock_config |