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

Camel测试:验证SQL存储过程调用中参数填充后的Header值

验证Camel中SQL存储过程模板填充后的实际值方法

以下几种方法可以直接获取并验证模板填充后的实际值:

1. 测试中拦截消息获取填充值

在Camel测试套件里,通过adviceWith修改目标路由,在调用sql-stored:template之前插入自定义处理器,直接从Exchange中提取填充后的模板:

adviceWith(context, "你的路由ID", a -> {
    a.weaveByToUri("sql-stored:template")
      .before().process(exchange -> {
          String filledTemplate = exchange.getIn().getHeader("SQL_STORED_TEMPLATE", String.class);
          // 这里直接做断言验证
          assertEquals("ADRE_API.MIGRATION_STARTET(INTEGER 12)", filledTemplate);
      });
});

这种方式能精准在存储过程调用前拿到最终值,适合单元测试场景。

2. 开启SQL组件日志调试

把Camel SQL组件的日志级别调到DEBUG或TRACE,组件会自动输出实际执行的存储过程语句。以Logback为例,在配置文件中添加:

<logger name="org.apache.camel.component.sql" level="DEBUG"/>

运行测试或应用后,查看日志就能找到填充后的完整调用语句,快速验证结果。

3. 自定义PrepareStatement策略

通过自定义PrepareStatementStrategy拦截SQL模板的填充过程,把填充后的结果存入Exchange属性,方便后续获取:

SqlComponent sqlComponent = context.getComponent("sql-stored", SqlComponent.class);
sqlComponent.setPrepareStatementStrategy(new DefaultPrepareStatementStrategy() {
    @Override
    public String prepareStatement(String sql, Map<String, Object> parameters, Exchange exchange) throws SQLException {
        String filledSql = super.prepareStatement(sql, parameters, exchange);
        // 把填充后的SQL存入Exchange属性
        exchange.setProperty("FILLED_SQL", filledSql);
        return filledSql;
    }
});

之后在测试或处理器中,通过exchange.getProperty("FILLED_SQL", String.class)获取值并验证。

4. 用Mock端点替代实际调用

在测试中把sql-stored:template替换为Mock端点,捕获发送到该端点的消息并验证Header值:

adviceWith(context, "你的路由ID", a -> {
    a.replaceFromWith("sql-stored:template", "mock:sql-stored");
});

// 配置Mock端点的预期
MockEndpoint mock = getMockEndpoint("mock:sql-stored");
mock.expectedMessageCount(1);
mock.message(0).header("SQL_STORED_TEMPLATE").isEqualTo("ADRE_API.MIGRATION_STARTET(INTEGER 12)");

// 执行测试后验证
assertMockEndpointsSatisfied();

这种方式能隔离外部依赖,专注于模板填充逻辑的验证。

内容的提问来源于stack exchange,提问作者Alessandr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:03:37