首次提交
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
pytest 全局配置和 fixtures。
|
||||
单元测试使用 mock,集成测试需要真实服务。
|
||||
"""
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from typing import Dict, Any
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def mock_config_dict() -> Dict[str, Any]:
|
||||
"""
|
||||
模拟配置数据,用于不依赖真实 config.json 的测试。
|
||||
"""
|
||||
return {
|
||||
"db_engine": {
|
||||
"engine": "sqlite+pysqlite:///:memory:",
|
||||
"async_engine": "sqlite+aiosqlite:///:memory:",
|
||||
"engine_option": {"echo": False},
|
||||
},
|
||||
"redis": {
|
||||
"connection": {
|
||||
"url": "redis://localhost:6379/15",
|
||||
},
|
||||
},
|
||||
"rbac": {
|
||||
"table": {
|
||||
"rule": "rbac_rule",
|
||||
"user": "rbac_user",
|
||||
"item": "rbac_item",
|
||||
"assignment": "rbac_assignment",
|
||||
"item_child": "rbac_item_child",
|
||||
},
|
||||
"user_class": "paste.rbac.rbac_user.RbacUser",
|
||||
},
|
||||
"logger": {
|
||||
"default": {
|
||||
"basic": {
|
||||
"level": 40,
|
||||
},
|
||||
},
|
||||
},
|
||||
"tornado": {
|
||||
"demo": {
|
||||
"port": 9000,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def temp_config_file(mock_config_dict):
|
||||
"""
|
||||
创建临时配置文件,测试后自动清理。
|
||||
"""
|
||||
with tempfile.NamedTemporaryFile(
|
||||
mode="w", suffix=".json", delete=False, encoding="utf-8"
|
||||
) as f:
|
||||
json.dump(mock_config_dict, f, ensure_ascii=False)
|
||||
temp_path = Path(f.name)
|
||||
|
||||
yield temp_path
|
||||
|
||||
# 清理
|
||||
temp_path.unlink(missing_ok=True)
|
||||
Reference in New Issue
Block a user