run_offline.py 1.2 KB

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