langchain4j-testing-strategies by giuseppe-trisciuoglio/developer-kit
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill langchain4j-testing-strategies由于 LLM 响应的非确定性以及 AI 工作流程的复杂性,LangChain4J 测试需要专门的策略。本技能提供了全面的测试模式,包括使用模拟对象进行单元测试、使用 Testcontainers 进行集成测试,以及对 RAG 系统、AI 服务和工具执行进行端到端测试。
在以下情况下使用此技能:
为了有效测试 LangChain4J 应用程序,请遵循以下关键策略:
使用模拟模型对业务逻辑进行快速、隔离的测试。详细示例请参阅 references/unit-testing.md。
// 示例:用于单元测试的模拟 ChatModel
ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(any(String.class)))
.thenReturn(Response.from(AiMessage.from("Mocked response")));
var service = AiServices.builder(AiService.class)
.chatModel(mockModel)
.build();
为测试设置正确的 Maven/Gradle 依赖项。完整配置请参阅 references/testing-dependencies.md。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
关键依赖项:
langchain4j-test - 测试工具和防护栏断言testcontainers - 使用容器化服务进行集成测试mockito - 模拟外部依赖项assertj - 更好的断言使用 Testcontainers 与真实服务进行测试。容器设置示例请参阅 references/integration-testing.md。
@Testcontainers
class OllamaIntegrationTest {
@Container
static GenericContainer<?> ollama = new GenericContainer<>(
DockerImageName.parse("ollama/ollama:0.5.4")
).withExposedPorts(11434);
@Test
void shouldGenerateResponse() {
ChatModel model = OllamaChatModel.builder()
.baseUrl(ollama.getEndpoint())
.build();
String response = model.generate("Test query");
assertNotNull(response);
}
}
关于流式响应、内存管理和复杂工作流程的测试,请参考 references/advanced-testing.md。
遵循 references/workflow-patterns.md 中的测试金字塔模式和最佳实践。
@Test
void shouldProcessQueryWithMock() {
ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(any(String.class)))
.thenReturn(Response.from(AiMessage.from("Test response")));
var service = AiServices.builder(AiService.class)
.chatModel(mockModel)
.build();
String result = service.chat("What is Java?");
assertEquals("Test response", result);
}
@Testcontainers
class RAGIntegrationTest {
@Container
static GenericContainer<?> ollama = new GenericContainer<>(
DockerImageName.parse("ollama/ollama:0.5.4")
);
@Test
void shouldCompleteRAGWorkflow() {
// 设置模型和存储
var chatModel = OllamaChatModel.builder()
.baseUrl(ollama.getEndpoint())
.build();
var embeddingModel = OllamaEmbeddingModel.builder()
.baseUrl(ollama.getEndpoint())
.build();
var store = new InMemoryEmbeddingStore<>();
var retriever = EmbeddingStoreContentRetriever.builder()
.chatModel(chatModel)
.embeddingStore(store)
.embeddingModel(embeddingModel)
.build();
// 测试完整工作流程
var assistant = AiServices.builder(RagAssistant.class)
.chatLanguageModel(chatModel)
.contentRetriever(retriever)
.build();
String response = assistant.chat("What is Spring Boot?");
assertNotNull(response);
assertTrue(response.contains("Spring"));
}
}
@BeforeEach 和 @AfterEach 进行设置/清理有关全面的测试指南和 API 参考,请参阅包含的参考文档:
// 用于快速单元测试
ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(anyString())).thenReturn(Response.from(AiMessage.from("Mocked")));
// 用于特定响应
when(mockModel.generate(eq("Hello"))).thenReturn(Response.from(AiMessage.from("Hi")));
when(mockModel.generate(contains("Java"))).thenReturn(Response.from(AiMessage.from("Java response")));
// 使用测试专用配置文件
@TestPropertySource(properties = {
"langchain4j.ollama.base-url=http://localhost:11434"
})
class TestConfig {
// 使用隔离配置进行测试
}
// 针对 AI 响应的自定义断言
assertThat(response).isNotNull().isNotEmpty();
assertThat(response).containsAll(expectedKeywords);
assertThat(response).doesNotContain("error");
@Timeout70% 单元测试
├─ 业务逻辑验证
├─ 防护栏测试
├─ 模拟工具执行
└─ 边界情况处理
20% 集成测试
├─ 使用 Ollama 的 Testcontainers
├─ 向量存储测试
├─ RAG 工作流程验证
└─ 性能基准测试
10% 端到端测试
├─ 完整的用户旅程
├─ 真实模型交互
└─ 负载下的性能
spring-boot-test-patternsunit-test-service-layerunit-test-boundary-conditions每周安装数
333
代码仓库
GitHub 星标数
173
首次出现
2026年2月3日
安全审计
安装于
claude-code265
gemini-cli252
opencode252
cursor250
codex247
github-copilot231
LangChain4J testing requires specialized strategies due to the non-deterministic nature of LLM responses and the complexity of AI workflows. This skill provides comprehensive patterns for unit testing with mocks, integration testing with Testcontainers, and end-to-end testing for RAG systems, AI Services, and tool execution.
Use this skill when:
To test LangChain4J applications effectively, follow these key strategies:
Use mock models for fast, isolated testing of business logic. See references/unit-testing.md for detailed examples.
// Example: Mock ChatModel for unit tests
ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(any(String.class)))
.thenReturn(Response.from(AiMessage.from("Mocked response")));
var service = AiServices.builder(AiService.class)
.chatModel(mockModel)
.build();
Setup proper Maven/Gradle dependencies for testing. See references/testing-dependencies.md for complete configuration.
Key dependencies :
langchain4j-test - Testing utilities and guardrail assertionstestcontainers - Integration testing with containerized servicesmockito - Mock external dependenciesassertj - Better assertionsTest with real services using Testcontainers. See references/integration-testing.md for container setup examples.
@Testcontainers
class OllamaIntegrationTest {
@Container
static GenericContainer<?> ollama = new GenericContainer<>(
DockerImageName.parse("ollama/ollama:0.5.4")
).withExposedPorts(11434);
@Test
void shouldGenerateResponse() {
ChatModel model = OllamaChatModel.builder()
.baseUrl(ollama.getEndpoint())
.build();
String response = model.generate("Test query");
assertNotNull(response);
}
}
For streaming responses, memory management, and complex workflows, refer to references/advanced-testing.md.
Follow testing pyramid patterns and best practices from references/workflow-patterns.md.
@Test
void shouldProcessQueryWithMock() {
ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(any(String.class)))
.thenReturn(Response.from(AiMessage.from("Test response")));
var service = AiServices.builder(AiService.class)
.chatModel(mockModel)
.build();
String result = service.chat("What is Java?");
assertEquals("Test response", result);
}
@Testcontainers
class RAGIntegrationTest {
@Container
static GenericContainer<?> ollama = new GenericContainer<>(
DockerImageName.parse("ollama/ollama:0.5.4")
);
@Test
void shouldCompleteRAGWorkflow() {
// Setup models and stores
var chatModel = OllamaChatModel.builder()
.baseUrl(ollama.getEndpoint())
.build();
var embeddingModel = OllamaEmbeddingModel.builder()
.baseUrl(ollama.getEndpoint())
.build();
var store = new InMemoryEmbeddingStore<>();
var retriever = EmbeddingStoreContentRetriever.builder()
.chatModel(chatModel)
.embeddingStore(store)
.embeddingModel(embeddingModel)
.build();
// Test complete workflow
var assistant = AiServices.builder(RagAssistant.class)
.chatLanguageModel(chatModel)
.contentRetriever(retriever)
.build();
String response = assistant.chat("What is Spring Boot?");
assertNotNull(response);
assertTrue(response.contains("Spring"));
}
}
@BeforeEach and @AfterEach for setup/teardownFor comprehensive testing guides and API references, see the included reference documents:
// For fast unit tests
ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(anyString())).thenReturn(Response.from(AiMessage.from("Mocked")));
// For specific responses
when(mockModel.generate(eq("Hello"))).thenReturn(Response.from(AiMessage.from("Hi")));
when(mockModel.generate(contains("Java"))).thenReturn(Response.from(AiMessage.from("Java response")));
// Use test-specific profiles
@TestPropertySource(properties = {
"langchain4j.ollama.base-url=http://localhost:11434"
})
class TestConfig {
// Test with isolated configuration
}
// Custom assertions for AI responses
assertThat(response).isNotNull().isNotEmpty();
assertThat(response).containsAll(expectedKeywords);
assertThat(response).doesNotContain("error");
@Timeout for external service calls70% Unit Tests
├─ Business logic validation
├─ Guardrail testing
├─ Mock tool execution
└─ Edge case handling
20% Integration Tests
├─ Testcontainers with Ollama
├─ Vector store testing
├─ RAG workflow validation
└─ Performance benchmarking
10% End-to-End Tests
├─ Complete user journeys
├─ Real model interactions
└─ Performance under load
spring-boot-test-patternsunit-test-service-layerunit-test-boundary-conditionsWeekly Installs
333
Repository
GitHub Stars
173
First Seen
Feb 3, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
claude-code265
gemini-cli252
opencode252
cursor250
codex247
github-copilot231
超能力技能使用指南:AI助手技能调用优先级与工作流程详解
41,800 周安装