操作指南

测试

师成师成· 更新于 2026-09-28· 阅读 17 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

用户手册

测试

测试是任何软件开发或集成过程中的关键环节。通常,Camel 用户会将各种不同的技术通过多种不同的 EIP 组合在一起,涉及不同的端点、语言、Bean 集成以及依赖注入,因此很容易出现问题!测试是确保一切按预期运行的关键武器。

Camel 是一个 Java 库,因此你可以在 JUnit 中轻松编写测试。不过,Camel 项目一直致力于让 Camel 的测试尽可能简单且强大,为此我们引入了以下特性。

测试模块

支持以下模块:

组件说明
camel-test-junit5JUnit 5:用于在独立模式(或不使用 Spring)下测试 Camel
camel-test-main-junit5JUnit 5:用于在 Camel Main 模式下测试 Camel
camel-test-spring-junit5JUnit 5:用于配合 Spring / Spring Boot 测试 Camel
camel-test-junit5JUnit 6:用于在独立模式(或不使用 Spring)下测试 Camel
camel-test-main-junit5JUnit 6:用于在 Camel Main 模式下测试 Camel
camel-test-spring-junit5JUnit 6:用于配合 Spring / Spring Boot 测试 Camel
camel-test-infraCamel Test Infra:Camel Test Infra 是一组模块,利用现代 JUnit 5 特性来抽象测试基础设施的准备与执行。除其他功能外,它还提供了基础设施抽象(基于 Test Containers——它是 camel-testcontainers 组件事实上的继任者),以及针对 Camel Context 本身的 JUnit 5 扩展。
camel-jbang-testCamel CLI 测试插件:一个 Camel CLI 插件,用于在使用 JBang 进行原型开发时编写自动化测试。这些测试能够从一开始就启动 Camel 集成并验证其逻辑。该测试插件无需任何项目配置,因此你可以直接开始编写和运行自动化测试。
如果你使用的是 Camel Quarkus,可以在 Camel Quarkus 文档中找到关于如何使用 Quarkus 和 Camel 进行测试的相关信息。

在所有方式中,测试类的写法基本相同,因为它们都复用了 Camel 的绑定与注入注解。

关于不同测试模块的更多详细信息,请参阅上表链接中各自的文档。

测试功能

Camel 提供了一组在编写 Camel 单元测试或集成测试时常用的功能。

测试端点

Camel 提供了若干端点,可以让测试更加容易。

名称说明
Mock使用 mock 测试路由和中介规则,并允许向端点添加断言。
DataSet用于负载测试和持久性测试,该端点提供了创建大量消息并发送给各个组件的方式,同时断言这些消息被正确消费。
DataSet Test用于自动从另一个端点加载一组预期消息,然后将这些消息与到达该端点的消息进行比较。

其中最主要的端点是 Mock 端点,它允许向不同的端点添加预期结果;随后你可以运行测试,并在测试结束时断言这些预期是否得到满足。

对物理传输技术进行桩实现

如果你想测试某条路由,但希望避免真正使用实际的物理传输方式,那么以下端点会很有用:

例如,对转换路由进行单元测试,而不是执行完整的集成测试
名称说明
Direct由生产者直接调用消费者,从而执行单线程(非 SEDA)的 VM 内调用,这可用于模拟物理传输层
SEDA通过 BlockingQueue 将消息异步投递给消费者,非常适合测试异步传输方式
Stub工作方式类似于 SEDA,但不会校验端点 URI,因此打桩非常简单。

测试已有的路由

Camel 提供了一些功能,用于在无法或不愿使用 Mock 等组件时,辅助对已有路由进行测试。

例如,你可能有一条已可用于生产的路由,希望通过某个第三方 API 向该路由发送消息来进行测试。

名称说明
NotifyBuilder允许你在某个特定条件发生时收到通知。例如,当路由处理完五条消息时。你可以构建复杂的表达式来匹配触发通知的条件。
AdviceWith允许你使用 RouteBuilder 的风格来增强(advice)一条已有的路由。例如,你可以将消息发送(或发送并跳过)到 Mock 端点,以验证 Camel 发送的消息是否符合预期。

集成测试

集成测试的目的是验证整个组件或服务与其同其他组件、基础设施和服务的集成是否正常。

通常,集成测试会将 Camel 应用作为一个整体启动,并包含消息代理、数据持久化以及与 Camel 应用交互的第三方服务等测试基础设施。

有关详情以及如何应对常见的集成测试挑战,请参阅本章关于集成测试的内容。

Camel 用户发现有不少第三方测试库非常有用,尤其是在进行集成测试时。

名称描述
Citrus 集成测试自动化集成测试框架,支持多种消息协议和数据格式
YAKSYAKS 是基于 Citrus 的框架,用于在 Kubernetes 上实现云原生 BDD 测试

Citrus 测试框架

作为为 Camel 应用编写集成测试的示例,你可以使用 Citrus 测试框架。Citrus 是一个开源的 Java 测试框架,专注于集成测试和消息处理。

该框架与 Apache Camel 集成得非常好。Citrus 可以帮助你编写自动化集成测试,对测试基础设施进行妥善准备,并与对外暴露的服务建立连接,从而借助强大的消息验证能力对 Camel 应用进行验证,支持多种消息数据格式(例如 XML、Json、YAML、纯文本)。

请参阅 Citrus 文档,了解如何为 Apache Camel 应用编写自动化测试。以下章节可能对 Camel 开发者和测试人员很有参考价值:

名称描述
Citrus 与 Camel 路由在测试过程中启动和停止 Camel 路由。
Citrus 与 Camel 测试基础设施在 Citrus 测试过程中启动和停止 Camel 测试基础设施服务。
Citrus 与 Camel 处理器在 Citrus 测试中使用 Camel 处理器、转换器和数据格式 EIP。
Citrus 与 Camel CLI在测试过程中使用 JBang 运行 Camel 集成。
Citrus 与 JBang 和 Camel CLI 提供了良好的集成。这意味着你可以从一开始就在 Camel CLI 的原型设计阶段使用 Citrus 编写自动化测试。详见 Camel CLI 测试插件 章节。

Citrus 与 Quarkus 和 Spring Boot 集成,因此你可以基于熟悉的框架和库来编写测试。你可以从一组受支持的测试引擎(如 JUnit Jupiter)中进行选择,以便在构建生命周期的一部分或在你喜爱的 IDE 中运行这些测试。

评论

登录后参与评论

正在加载评论…