Spring AI 1.0 GA 测试框架:单元测试与集成测试

Spring AI 1.0 GA 的测试框架遵循标准分层测试策略,确保AI组件的可靠性和功能性。以下是核心测试方法:


一、单元测试

目标:验证单个组件(如模型适配器、工具类)的独立逻辑。
特点

  • 不依赖外部服务(如OpenAI API)
  • 使用Mockito模拟依赖项
  • 快速执行(毫秒级)

示例代码

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.ai.chat.ChatClient;

public class ChatServiceUnitTest {

    @Test
    void testResponseProcessing() {
        // 1. 模拟ChatClient
        ChatClient mockClient = Mockito.mock(ChatClient.class);
        Mockito.when(mockClient.call("Hello")).thenReturn("AI: Hi there!");

        // 2. 测试业务逻辑
        ChatService service = new ChatService(mockClient);
        String result = service.processInput("Hello");
        
        // 3. 断言验证
        assertEquals("Processed: AI: Hi there!", result);
    }
}

关键工具

  • JUnit 5
  • Mockito
  • AssertJ

二、集成测试

目标:验证多组件协同工作及外部服务集成(如向量数据库、AI模型API)。
特点

  • 启动轻量级Spring上下文
  • 使用Testcontainers模拟真实依赖
  • 覆盖端到端流程

示例代码

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.ai.embedding.EmbeddingClient;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Testcontainers;

@Testcontainers
@SpringBootTest
public class EmbeddingServiceIntegrationTest {

    // 使用Testcontainers启动向量数据库
    static GenericContainer<?> vectorDB = new GenericContainer<>("qdrant/qdrant:v1.7.0")
        .withExposedPorts(6334);

    @Autowired
    private EmbeddingClient embeddingClient;

    @Test
    void testVectorStorage() {
        // 1. 生成嵌入向量
        List<Double> embedding = embeddingClient.embed("Spring AI");
        
        // 2. 存储到测试数据库
        VectorStore store = new QdrantVectorStore(vectorDB.getHost(), vectorDB.getFirstMappedPort());
        store.add(embedding);
        
        // 3. 验证检索结果
        List<Double> result = store.search("AI");
        assertTrue(result.similarity(embedding) > 0.9);
    }
}

关键工具

  • @SpringBootTest
  • Testcontainers(模拟数据库/API)
  • Spring AI 的 @MockBean 注解

三、测试策略对比
维度 单元测试 集成测试
执行速度 极快(<100ms) 较慢(依赖外部服务)
覆盖范围 单一类/方法 多组件交互
外部依赖 完全隔离 模拟或真实服务
适用场景 逻辑校验、边界条件 数据流验证、端到端流程

四、最佳实践
  1. 分层覆盖

    • 70% 单元测试(核心算法)
    • 20% 集成测试(组件交互)
    • 10% 端到端测试(完整流水线)
  2. AI特有测试

    • 模型稳定性:通过随机输入测试抗干扰能力
    • 向量精度:验证嵌入向量的余弦相似度阈值
    • 限流处理:模拟API速率限制异常
  3. 持续集成

    # CI流水线示例(GitHub Actions)
    jobs:
      test:
        steps:
          - name: 单元测试
            run: ./mvnw test
          - name: 集成测试
            run: ./mvnw verify -Pintegration
            env:
              OPENAI_API_KEY: ${{ secrets.TEST_API_KEY }}
    

提示:Spring AI 1.0 GA 提供 spring-ai-test 模块,内含预配置的Mock组件(如MockEmbeddingClient),可通过@ImportAutoConfiguration快速启用。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐