"""运行离线单元测试。不会调用真实 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())