Files
gaokao-volunteer-system/data/crowd_db/tests/test_loader.py
Hermes 552526a3f1 feat(crowd_db): T1.1 数据加载器 + 目录完善
- data/crowd_db/README.md 补全字段说明、文件命名、数据来源
- data/crowd_db/hunan.json 已有 T2.1 整理的 8 个分数段 58 条数据
- 新增 loader.py: CrowdDBLoader + CrowdRecommendation
  - 省份→文件名映射(湖南→hunan.json) + 多种命名兜底
  - load_province / find_recommendations / find_recommendation_by_school
  - risk_level 派生属性(frequency>=4=high)
- tests/test_loader.py 5 测试全通过

Plan: docs/plans/T1-1-crowd-db-setup.md DoD 达成
2026-06-12 10:29:53 +08:00

57 lines
1.6 KiB
Python

"""数据加载器测试"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", ".."))
from data.crowd_db.loader import CrowdDBLoader, CrowdRecommendation
def test_load_hunan_data():
"""测试加载湖南数据"""
loader = CrowdDBLoader()
data = loader.load_province("湖南")
assert data is not None
assert data["province"] == "湖南"
assert len(data["score_ranges"]) > 0
def test_find_recommendations_in_range():
"""测试查询分数段内的推荐"""
loader = CrowdDBLoader()
recs = loader.find_recommendations("湖南", score=575)
assert isinstance(recs, list)
# 575分应该在 560-580 范围内
if recs:
assert all(r["frequency"] > 0 for r in recs)
def test_find_recommendations_by_school():
"""测试按院校名查询推荐"""
loader = CrowdDBLoader()
rec = loader.find_recommendation_by_school("湖南", "长沙理工大学")
assert rec is not None
assert rec["name"] == "长沙理工大学"
def test_load_nonexistent_province():
"""测试加载不存在的省份"""
loader = CrowdDBLoader()
data = loader.load_province("不存在的省")
assert data is None
def test_crowd_recommendation_dataclass():
"""测试数据类"""
rec = CrowdRecommendation(
name="测试大学",
major="测试专业",
frequency=4,
platforms=["千问", "元宝", "百度", "豆包"],
predicted_increase=15,
alternatives=[],
)
assert rec.frequency == 4
assert rec.risk_level == "high" # frequency=4 应该是高风险