diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..c7b23ec --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +pythonpath = . +testpaths = tests diff --git a/sanguo_data/config.py b/sanguo_data/config.py index 2815fcf..5259b7d 100644 --- a/sanguo_data/config.py +++ b/sanguo_data/config.py @@ -10,8 +10,17 @@ class DataConfig: performance: dict def load_config(path: str) -> DataConfig: - with open(path, "r", encoding="utf-8") as f: - raw = yaml.safe_load(f) + try: + with open(path, "r", encoding="utf-8") as f: + raw = yaml.safe_load(f) + except FileNotFoundError: + raise FileNotFoundError(f"配置文件不存在: {path}") + except yaml.YAMLError as e: + raise ValueError(f"YAML解析失败: {e}") + + if not raw: + raise ValueError(f"配置文件为空: {path}") + return DataConfig( data_paths=raw.get("data_paths", {}), data_sources=raw.get("data_sources", {}), diff --git a/tests/data/__pycache__/__init__.cpython-314.pyc b/tests/data/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index f849e1a..0000000 Binary files a/tests/data/__pycache__/__init__.cpython-314.pyc and /dev/null differ diff --git a/tests/data/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc b/tests/data/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc deleted file mode 100644 index dca3eb8..0000000 Binary files a/tests/data/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc and /dev/null differ diff --git a/tests/data/test_config.py b/tests/data/test_config.py index 5ea5934..d66f1e2 100644 --- a/tests/data/test_config.py +++ b/tests/data/test_config.py @@ -1,4 +1,5 @@ # tests/data/test_config.py +import pytest from sanguo_data.config import load_config, DataConfig def test_load_config_returns_dataconfig(tmp_path): @@ -25,3 +26,7 @@ performance: assert cfg.data_paths["daily_dir"] == "/tmp/daily" assert cfg.data_sources["daily"][0]["name"] == "eastmoney" assert cfg.performance["max_retries"] == 3 + +def test_load_config_raises_on_missing_file(): + with pytest.raises(FileNotFoundError, match="配置文件不存在"): + load_config("/nonexistent/path/config.yaml")