如何在Apache Camel中对生产路线进行单元测试?

vei*_*oen 20 integration junit routes mocking apache-camel

假设我在单独的RouteBuilder类中创建了我的路由.看起来像:

  • 从JMS队列中获取消息
  • 做一些转型,验证等
  • 取决于验证结果转发到特定的JMS队列并在DB中保存

我想在没有JMS代理和没有DB的情况下对这条路线进行单元测试.我知道我可以模拟我的处理器实现,但这还不够.我不想改变这条路线(假设我在jar文件中得到了这个类).据我所知,从Camel in Action(第6.2.6节)中,为了能够使用端点和其他东西的模拟,我需要更改我的路由端点定义(在本书的示例中,这是"mina:tcp:/"的更改/ miranda"to"mock:miranda"etc).

是否可以在不改变路径定义的情况下完全隔离测试流量?如果我将RouteBuilder作为一个单独的类,我是否被迫以某种方式"复制"路由定义并手动更改它?是不是测试了错误的东西?

我对Camel很新,对我而言,能够在发布路线时进行隔离单元测试真的很酷.只是为了能够改变一些东西,运行小测试,观察结果等等.

Cla*_*sen 24

假设RouteBuilder类具有硬编码端点,则测试起来有点困难.但是,如果RouteBuilder使用端点uris的属性占位符,那么您通常可以使用一组不同的端点uris进行单元测试.正如骆驼书第6章所解释的那样.

如果它们是硬编码的,那么您可以在单元测试中使用带有功能的建议,如下所示:http://camel.apache.org/advicewith.html

在Camel 2.7中,我们可以更轻松地操作路线,因此您可以移除零件,更换零件等.这就是链接谈论的编织物.

例如,为了模拟向数据库端点发送消息,您可以使用上面的内容并将to替换为另一个将其发送到mock的地方.

在以前的版本中,您可以使用interceptSendToEndpoint技巧,该技巧也包含在Camel书中(第6.3.3节)

哦,您也可以使用模拟组件替换组件,如第169页所示.现在,从Camel 2.8开始,模拟组件将不再抱怨它不知道的uri参数.这意味着更容易在每个组件级别上使用模拟替换组件.


ssm*_*one 5

我有

   <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
        <property name="location" value="classpath:shop.properties"/>
    </bean>

    <route>
        <from uri="direct://stock"/>
        <to uri="{{stock.out}}"/>
    </route>
Run Code Online (Sandbox Code Playgroud)

在我的spring文件中,然后在测试类路径上的shop.properties中,我有一个stock.out = xxxx,它在运行时被替换,因此我可以使用不同的路由,一个用于运行,另一个用于测试

在多个环境中的6.1.6单元测试中有一个更好的示例