diff --git a/tests/unit/test_tts_segment_synthesis.py b/tests/unit/test_tts_segment_synthesis.py old mode 100644 new mode 100755 index 583b3a2ba..0018c711b --- a/tests/unit/test_tts_segment_synthesis.py +++ b/tests/unit/test_tts_segment_synthesis.py @@ -107,10 +107,11 @@ class TestAudioMerger: finally: os.unlink(path) - @patch("packages.application.tts_job.audio_merger.subprocess.run") - def test_ffmpeg_called_correctly(self, mock_run: MagicMock) -> None: - """多文件调用 FFmpeg concat。""" - mock_run.return_value = MagicMock(returncode=0) + @patch("packages.application.tts_job.audio_merger.run_ffmpeg") + def test_ffmpeg_called_correctly(self, mock_run_ffmpeg: MagicMock) -> None: + """多文件调用 FFmpeg concat(通过 run_ffmpeg 统一入口)。""" + # run_ffmpeg 成功返回 (stdout, stderr) + mock_run_ffmpeg.return_value = ("", "") # 创建临时文件 paths = [] @@ -130,20 +131,24 @@ class TestAudioMerger: except (FileNotFoundError, OSError): pass # Expected since we're mocking - # 验证 FFmpeg 被调用 - mock_run.assert_called_once() - cmd = mock_run.call_args[0][0] - assert cmd[0] == "ffmpeg" + # 验证 run_ffmpeg 被调用 + mock_run_ffmpeg.assert_called_once() + cmd = mock_run_ffmpeg.call_args[0][0] + from shared.ffmpeg_utils import FFMPEG_BIN + + assert cmd[0] == FFMPEG_BIN assert "-f" in cmd assert "concat" in cmd finally: for p in paths: os.unlink(p) - @patch("packages.application.tts_job.audio_merger.subprocess.run") - def test_ffmpeg_failure_raises(self, mock_run: MagicMock) -> None: - """FFmpeg 失败抛出 AudioMergeError。""" - mock_run.return_value = MagicMock(returncode=1, stderr="error details") + @patch("packages.application.tts_job.audio_merger.run_ffmpeg") + def test_ffmpeg_failure_raises(self, mock_run_ffmpeg: MagicMock) -> None: + """FFmpeg 失败抛出 AudioMergeError(通过 run_ffmpeg 抛出 CalledProcessError)。""" + from subprocess import CalledProcessError + + mock_run_ffmpeg.side_effect = CalledProcessError(returncode=1, cmd=["ffmpeg"], stderr="error details") paths = [] for i in range(2): @@ -155,6 +160,7 @@ class TestAudioMerger: merger = AudioMerger() with pytest.raises(AudioMergeError, match="FFmpeg 合并失败"): merger.merge(paths) + mock_run_ffmpeg.assert_called_once() finally: for p in paths: os.unlink(p)