test(packtool): 优化打包工具测试用例,统一使用临时工作目录
1. 新增自动切换临时工作目录的全局fixture,避免测试污染项目根目录 2. 移除测试中手动mock缓存目录的代码,复用全局fixture配置 3. 简化测试代码结构,提升测试可读性和维护性
This commit is contained in:
+28
-11
@@ -5,10 +5,29 @@ from __future__ import annotations
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
import pyflowx as px
|
import pyflowx as px
|
||||||
from pyflowx.cli import packtool
|
from pyflowx.cli import packtool
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------- #
|
||||||
|
# Fixtures: 确保所有测试都在临时目录执行,不污染项目根目录
|
||||||
|
# ---------------------------------------------------------------------- #
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def packtool_tmp_workdir(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||||
|
"""自动切换到临时工作目录,防止测试污染项目根目录.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
tmp_path: pytest 提供的临时目录
|
||||||
|
monkeypatch: pytest 的 monkeypatch 工具
|
||||||
|
"""
|
||||||
|
# 切换工作目录到 tmp_path
|
||||||
|
monkeypatch.chdir(tmp_path)
|
||||||
|
# Mock DEFAULT_CACHE_DIR 到临时目录
|
||||||
|
monkeypatch.setattr(packtool, "DEFAULT_CACHE_DIR", str(tmp_path / ".cache" / "pypack"))
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
# pack_source
|
# pack_source
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
@@ -96,16 +115,14 @@ class TestInstallEmbedPython:
|
|||||||
mock_zip_instance = MagicMock()
|
mock_zip_instance = MagicMock()
|
||||||
mock_zipfile.return_value.__enter__.return_value = mock_zip_instance
|
mock_zipfile.return_value.__enter__.return_value = mock_zip_instance
|
||||||
|
|
||||||
# Ensure cache doesn't exist by using tmp_path as cache dir
|
packtool.install_embed_python("3.10", output_dir)
|
||||||
with patch.object(packtool, "DEFAULT_CACHE_DIR", str(tmp_path / ".cache")):
|
|
||||||
packtool.install_embed_python("3.10", output_dir)
|
|
||||||
|
|
||||||
# Verify download was called
|
# Verify download was called
|
||||||
assert mock_urlretrieve.called
|
assert mock_urlretrieve.called
|
||||||
# Verify extraction was called
|
# Verify extraction was called
|
||||||
assert mock_zip_instance.extractall.called
|
assert mock_zip_instance.extractall.called
|
||||||
# Verify output directory was created
|
# Verify output directory was created
|
||||||
assert output_dir.exists()
|
assert output_dir.exists()
|
||||||
|
|
||||||
def test_install_embed_python_with_cache(self, tmp_path: Path) -> None:
|
def test_install_embed_python_with_cache(self, tmp_path: Path) -> None:
|
||||||
"""Should use cached Python if available."""
|
"""Should use cached Python if available."""
|
||||||
@@ -197,8 +214,8 @@ class TestInstallEmbedPython:
|
|||||||
|
|
||||||
packtool.install_embed_python("3.10", output_dir)
|
packtool.install_embed_python("3.10", output_dir)
|
||||||
|
|
||||||
# Verify cache directory was created
|
# Verify cache directory was created (now in tmp_path)
|
||||||
Path(packtool.DEFAULT_CACHE_DIR)
|
cache_dir = Path(packtool.DEFAULT_CACHE_DIR)
|
||||||
# Note: In test environment, cache might not persist due to mocking
|
# Note: In test environment, cache might not persist due to mocking
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user