Apache camel Spring测试基于内容的Camel路由器

Apache camel Spring测试基于内容的Camel路由器,apache-camel,spring-test,camel-test,Apache Camel,Spring Test,Camel Test,我有以下春季路线: <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="activemq:topic:inbox" /> <choice> <when> <simple>${in.h

我有以下春季路线:

 <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="activemq:topic:inbox" />
            <choice>
                <when>
                    <simple>${in.header.Value}</simple>
                    <log message="Cc: ${in.header.Value}" />
                </when>
            </choice>
            <to uri="mock:result" />
        </route>
 </camelContext>
我正在努力理解如何测试CBR规定的实际条件,但更重要的是,我怀疑这是否是测试它的正确方法。MyComponent.VALUEConstant是在我的自定义组件中指定的属性,上面的测试实际上正在通过。但是,如果我在我的组件上用不同的属性实例化headerValue,因此该条件应该失败,那么测试通过。你能帮忙吗

谢谢,


嗯,我能看到的第一件事是,您的简单表达式缺少比较-它可能应该是
${in.header.value}=='wantedvalue'

就测试而言,这实际上取决于测试的类型。在这里,您正在进行集成测试,因此我将验证效果是否如预期的那样-DB改变了它应该改变的方式,等等。但是,由于您的路线只是做一些日志记录,因此我将改变:

<log message="Cc: ${in.header.Value}" />

进入


然后验证
mock:choice触发的
endpoint是否收到消息(或者没有收到,具体取决于场景)。但在对真实路由的测试中,您可能希望验证是否已将某些数据插入到数据库中,或是否已将某些消息发布到MQ,或是否已发送电子邮件


就常量而言,我建议您使用外部化属性-这两种属性都有很好的属性占位符支持,我建议您尝试一下。

您好,谢谢您的帮助。我相信我被这个简单的表达式本身弄糊涂了,因为Value是我的自定义组件(仅部分由我编写)中的一个实际属性,它只映射到“Value”。所以,如果我错了,请纠正我,我相信我需要创建一个具有实际电子邮件地址的该值的实例,然后通过sendBodyAndHeader发送,对吗?是的,我认为我需要有一个端点(mock)来验证消息是否被接收(内部)。然而,我不能改变春天的路线。是否有任何方法(这正是我所寻找的)注入另一个mock,但只在测试中注入?我的路由中可以有多个mock端点吗?我有一些简单的日志:我想验证的消息以及选择条件。您可以使用属性占位符将
外部化为
URI,然后覆盖测试中的属性-这样您的路由逻辑不会改变,但可以使用任何您认为有用的URI。但通常,您希望避免在集成测试中使用模拟端点,因为它们使您的测试与预期的运行时环境不同。如果查看,您将看到表达式将仅检查名为
Value
的标头是否存在,但不会检查标头的值,这意味着只要标题存在,就可以接受任何值。
<log message="Cc: ${in.header.Value}" />
<log message="Cc: ${in.header.Value}" />
<to uri="mock:choice-triggered" />