"""嵌入模型测试.""" import pytest from src.core.config import EmbedConfig from src.core.embedder import Embedder, create_embedder class TestEmbedder: """Embedder 单元测试. 注意:本地模型测试需要下载 sentence-transformers 模型(约 100MB), 首次运行耗时较长。API 模式测试使用 mock 避免网络依赖。 """ @pytest.fixture def local_config(self): return EmbedConfig(mode="local") def test_create_local_embedder(self, local_config): """创建本地嵌入器,验证维度正确.""" embedder = create_embedder(local_config) assert embedder.dimension > 0 assert isinstance(embedder.dimension, int) def test_embed_single_text(self, local_config): """嵌入单条文本返回正确维度向量.""" embedder = create_embedder(local_config) result = embedder.embed(["你好世界"]) assert len(result) == 1 assert len(result[0]) == embedder.dimension assert all(isinstance(v, float) for v in result[0]) def test_embed_multiple_texts(self, local_config): """嵌入多条文本返回对应数量的向量.""" embedder = create_embedder(local_config) texts = ["第一段文本", "第二段文本", "第三段文本"] result = embedder.embed(texts) assert len(result) == 3 for vec in result: assert len(vec) == embedder.dimension def test_embed_empty_list_raises(self, local_config): """空列表应抛出异常.""" embedder = create_embedder(local_config) with pytest.raises(ValueError): embedder.embed([]) def test_create_embedder_from_factory_function(self, local_config): """工厂函数正确创建 Embedder 实例.""" embedder = create_embedder(local_config) assert isinstance(embedder, Embedder)