You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CamelSpringBootTest中CamelContext启动前Mock Apache Camel路由

如何在CamelSpringBootTest中CamelContext启动前Mock Apache Camel路由

这个场景我之前也碰到过,默认Spring Boot集成Camel时会自动启动CamelContext,导致路由的configure()方法提前执行,根本没机会在@BeforeEach里做Mock配置。下面给你一套可行的解决方案:


1. 先禁用CamelContext自动启动

最直接的方式是在测试类的@SpringBootTest注解里添加配置属性,阻止CamelContext自动启动:

@CamelSpringBootTest
@SpringBootTest(properties = {"camel.springboot.auto-startup=false"})
public class MyCamelRouteTest {
    // 测试代码...
}

这样Spring上下文初始化时,CamelContext会处于待启动状态,不会立刻执行路由的configure()方法,给你留出Mock配置的时间。

2. 在@BeforeEach中完成路由Mock配置

拿到Autowired的CamelContext后,用Camel提供的AdviceWithRouteBuilder来修改路由规则——比如替换真实业务端点为Mock端点、拦截指定处理器等。注意:这一步必须在启动CamelContext之前执行,否则路由已经初始化完成就没法修改了。

举个具体例子:

@Autowired
protected CamelContext camelContext;

@BeforeEach
void setUp() throws Exception {
    // 针对指定ID的路由做Mock配置
    camelContext.getRouteDefinition("my-business-route")
        .adviceWith(camelContext, new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                // 把路由的起始端点替换为Mock用的direct端点
                replaceFromWith("direct:mock-start");
                // 拦截ID为"order-processor"的处理器,替换为Mock端点
                weaveById("order-processor").replace().to("mock:processed-order");
            }
        });

    // 所有Mock配置完成后,手动启动CamelContext
    camelContext.start();
}

3. 编写测试逻辑验证Mock效果

启动CamelContext后,就可以用ProducerTemplate发送测试消息到Mock的起始端点,然后通过MockEndpoint验证消息是否按预期流转:

@Autowired
protected ProducerTemplate producerTemplate;

@Test
void testRouteMock() throws Exception {
    // 发送测试消息到Mock起始端点
    producerTemplate.sendBody("direct:mock-start", "test-order-data");

    // 验证Mock端点是否收到消息
    MockEndpoint mockEndpoint = camelContext.getEndpoint("mock:processed-order", MockEndpoint.class);
    mockEndpoint.expectedMessageCount(1);
    mockEndpoint.assertIsSatisfied();
}

额外注意点

  • 一定要给你的路由设置明确的ID(比如from("...").id("my-business-route")),否则getRouteDefinition()找不到对应的路由
  • 除了用@SpringBootTest的properties配置,也可以通过自定义CamelContextConfiguration Bean来全局设置自动启动为false,适合多个测试类复用配置的场景
  • 使用AdviceWith时记得捕获异常,避免因路由ID不存在等问题导致测试失败

备注:内容来源于stack exchange,提问作者Marian Klühspies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:49:06