骆驼:模拟并从路径中的组件返回值

时间:2016-11-17 12:08:30

标签: java mocking apache-camel camel-test

我的服务中有以下路线:

epoch_milli = 1479383961245
t = Time.at(epoch_milli / 1000.0) # => 2016-11-17 09:59:21 -0200
micro = t.usec                    # => 244999
milli = micro / 1000.0            # => 244.999

当我尝试对此运行测试时,它给出了一个错误,指出camel无法自动创建组件mybatis。我对测试骆驼路线缺乏经验,所以我不能完全确定在哪里使用它。第一个mybatis调用更新表中的一行,该行未进行测试,因此我想做一些类似于端点命中时的操作,返回值为1的CamelMyBatisResult头。第二个mybatis端点应该返回一个hashmap(第一次测试为空,第二次测试为空)。我如何使用驼峰测试实现何时/当时的机制?我已经查看了模拟端点camel docs,但我无法弄清楚如何应用它并让它返回一个值到交换机,然后继续路由(测试的最终结果是检查发送带有或不带附件的电子邮件)

编辑:尝试使用replace()。set *方法并使用对内联处理器的调用替换mybatis端点:

public void configure() {

    /*
     * Scheduled Camel route to produce a monthly report from the audit table. 
     * This is scheduled to run the first day of every month.
     */

    // @formatter:off
    from(reportUri)
        .routeId("monthly-report-route")
        .log("Audit report processing started...")
        .to("mybatis:updateProcessControl?statementType=Update")
        .choice()
            /*
             * If the rows updated is 1, this service instance wins and can run the report.
             * If the rows updated is zero, go to sleep and wait for the next scheduled run.  
             */
            .when(header("CamelMyBatisResult").isEqualTo(1))
                .process(reportDateProcessor)
                .to("mybatis:selectReport?statementType=SelectList&consumer.routeEmptyResultSet=true")
                .process(new ReportProcessor())
                .to("smtp://smtpin.tilg.com?to=" 
                        + emailToAddr 
                        + "&from=" + emailFromAddr )
                .id("RecipientList_ReportEmail")
        .endChoice()
    .end();
    // @formatter:on
}

到目前为止,标题仍为空,正如主体(TEST变量是直接组件)

1 个答案:

答案 0 :(得分:5)

如果您想要输入硬编码的响应,则可以更轻松地对您的路线进行建议。见这里:http://camel.apache.org/advicewith.html

基本上,为每个端点添加一个id或Foo。然后你的测试执行一个adviceWith然后用一些硬编码的响应替换.to()。它可以是地图,字符串或您想要的任何其他内容,它将被替换。例如:

T

注意,它在文档中说你需要覆盖isAdviceWith方法并手动启动和停止camelContext。

如果您遇到问题,请告诉我们。开始使用起来有点棘手,但是一旦掌握了它,模拟响应实际上非常强大。

这是一个在执行adviceWith时将正文添加到简单表达式的示例。

.to()