| 12345678910111213141516171819202122232425262728293031 |
- """运行离线单元测试。不会调用真实 API、访问数据库或启动服务。"""
- import os
- import socket
- import sys
- import unittest
- from pathlib import Path
- from unittest.mock import patch
- def main():
- root = Path(__file__).resolve().parents[1]
- sys.path.insert(0, str(root))
- # 仅测试进程使用占位凭据,实际请求由网络拦截阻止。
- os.environ["DEEPSEEK_API_KEY"] = "offline-test-placeholder"
- os.environ["DASHSCOPE_API_KEY"] = "offline-test-placeholder"
- os.environ["QWEATHER_API_KEY"] = "offline-test-placeholder"
- os.environ["RUN_ONLINE_TESTS"] = "0"
- def no_network(*args, **kwargs):
- raise RuntimeError("离线测试禁止网络连接,请使用模拟对象。")
- with patch.object(socket.socket, "connect", no_network), \
- patch.object(socket.socket, "connect_ex", no_network), \
- patch.object(socket, "create_connection", no_network):
- suite = unittest.defaultTestLoader.discover(str(root / "tests"), top_level_dir=str(root))
- result = unittest.TextTestRunner(verbosity=2).run(suite)
- return 0 if result.wasSuccessful() else 1
- if __name__ == "__main__":
- raise SystemExit(main())
|