Files
xiaoxia-saas/tests/unit/test_asr_service_factory.py
T
CI Bot 7a72cfd709
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m9s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m19s
CI/CD Pipeline / Validate - Code Quality (push) Failing after 3m10s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 3m7s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 3m7s
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 1m17s
CI/CD Pipeline / Frontend Lint (push) Successful in 3m37s
CI/CD Pipeline / Integration Tests (push) Successful in 2m18s
CI/CD Pipeline / Unit Tests (push) Failing after 4m59s
CI/CD Pipeline / Build Staging API Image (push) Successful in 8m39s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 3m25s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 42s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 27m2s
CI/CD Pipeline / Staging API Integration Tests (push) Failing after 30m15s
style: auto-format with black + isort + prettier
2026-07-25 00:16:10 +00:00

91 lines
2.8 KiB
Python
Executable File

"""ASR 服务工厂单元测试."""
from __future__ import annotations
import os
import pytest
from services.asr_service_factory import get_asr_service, reset_asr_service_cache
@pytest.fixture(autouse=True)
def clean_env():
"""每个测试前后清理环境变量和缓存."""
# 保存原始值
old = os.environ.get("ASR_PROVIDER")
reset_asr_service_cache()
yield
# 恢复
if old is not None:
os.environ["ASR_PROVIDER"] = old
elif "ASR_PROVIDER" in os.environ:
del os.environ["ASR_PROVIDER"]
reset_asr_service_cache()
class TestGetAsrService:
"""ASR服务工厂测试."""
def test_default_no_provider_returns_none(self):
"""未配置ASR_PROVIDER时返回None."""
if "ASR_PROVIDER" in os.environ:
del os.environ["ASR_PROVIDER"]
reset_asr_service_cache()
result = get_asr_service()
assert result is None
def test_empty_provider_returns_none(self):
"""ASR_PROVIDER为空字符串时返回None."""
os.environ["ASR_PROVIDER"] = ""
reset_asr_service_cache()
result = get_asr_service()
assert result is None
def test_whitespace_provider_returns_none(self):
"""ASR_PROVIDER为空白字符时返回None."""
os.environ["ASR_PROVIDER"] = " "
reset_asr_service_cache()
result = get_asr_service()
assert result is None
def test_mock_provider_returns_mock_service(self):
"""mock provider返回MockASRService."""
os.environ["ASR_PROVIDER"] = "mock"
reset_asr_service_cache()
result = get_asr_service()
assert result is not None
# 检查类型名称
assert type(result).__name__ == "MockASRService"
def test_mock_provider_case_insensitive(self):
"""provider大小写不敏感."""
os.environ["ASR_PROVIDER"] = "MOCK"
reset_asr_service_cache()
result = get_asr_service()
assert result is not None
assert type(result).__name__ == "MockASRService"
def test_unknown_provider_returns_none(self):
"""未知provider返回None(不阻断主流程)."""
os.environ["ASR_PROVIDER"] = "unknown_provider_xyz"
reset_asr_service_cache()
result = get_asr_service()
assert result is None
def test_singleton_caching(self):
"""单例缓存有效,多次调用返回同一实例."""
os.environ["ASR_PROVIDER"] = "mock"
reset_asr_service_cache()
s1 = get_asr_service()
s2 = get_asr_service()
assert s1 is s2
def test_reset_cache_clears_singleton(self):
"""重置缓存后返回新实例."""
os.environ["ASR_PROVIDER"] = "mock"
reset_asr_service_cache()
s1 = get_asr_service()
reset_asr_service_cache()
s2 = get_asr_service()
assert s1 is not s2