moesnow 600f4d369c
test: 添加全面的单元测试体系
- 配置 pytest 测试框架和开发依赖 (pytest, pytest-cov, pytest-qt)
- 添加 utils/ 模块测试: color, date, image_utils, console, command, singleton, logger, registry
- 添加 module/ 模块测试: workflow, config, notification, localization, ocr, screen, update
- 添加 app/ GUI 组件测试: trie, signal_bus, config, style_sheet, icon
- 添加 app/ 纯函数测试: warp_export, account_manager, schedule_dialog, check_update, log_interface, pushsettingcard, switchsettingcard
- 添加通知子模块测试: webhook, telegram, smtp, lark, kook, pac, notifiers
- 添加注册表模块测试: star_rail_setting, game_auto_hdr, gameaccount (winreg mock)
- 共 584 个测试用例通过,覆盖率 17%
2026-05-20 01:59:56 +08:00

56 lines
2.0 KiB
Python

from unittest.mock import patch, MagicMock
import subprocess
from utils.command import subprocess_with_timeout, subprocess_with_stdout
class TestSubprocessWithTimeout:
@patch("utils.command.subprocess.Popen")
def test_success(self, mock_popen):
mock_process = MagicMock()
mock_process.returncode = 0
mock_popen.return_value = mock_process
result = subprocess_with_timeout(["echo", "hello"], timeout=5)
assert result is True
@patch("utils.command.subprocess.Popen")
def test_failure(self, mock_popen):
mock_process = MagicMock()
mock_process.returncode = 1
mock_popen.return_value = mock_process
result = subprocess_with_timeout(["false"], timeout=5)
assert result is False
@patch("utils.command.subprocess.Popen")
def test_timeout(self, mock_popen):
mock_process = MagicMock()
mock_process.communicate.side_effect = subprocess.TimeoutExpired(cmd="test", timeout=5)
mock_popen.return_value = mock_process
result = subprocess_with_timeout(["sleep", "100"], timeout=5)
assert result is False
mock_process.terminate.assert_called_once()
class TestSubprocessWithStdout:
@patch("utils.command.subprocess.run")
def test_success(self, mock_run):
mock_result = MagicMock()
mock_result.returncode = 0
mock_result.stdout = "hello world\n"
mock_run.return_value = mock_result
result = subprocess_with_stdout(["echo", "hello"])
assert result == "hello world"
@patch("utils.command.subprocess.run")
def test_failure(self, mock_run):
mock_result = MagicMock()
mock_result.returncode = 1
mock_run.return_value = mock_result
result = subprocess_with_stdout(["false"])
assert result is None
@patch("utils.command.subprocess.run")
def test_exception(self, mock_run):
mock_run.side_effect = Exception("command not found")
result = subprocess_with_stdout(["nonexistent"])
assert result is None