我有以下Spring路线:
<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>
我需要使用Spring Testing(CamelSpringJUnit4ClassRunner),尽管我已经找到了关于如何使用Java DSL测试条件的易于理解的示例。我的测试类是这样的:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@BootstrapWith(CamelTestContextBootstrapper.class)
@ContextConfiguration(locations = "file:src/main/resources/META-INF/spring/camel-context-activemq-embedded.xml")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@MockEndpoints("log:*")
@DisableJmx(false)
public class MyTest{
private Logger LOG = LogManager.getLogger(MyTest.class.getName());
protected Exchange exchange;
protected CustomComponent customComponent= new CustomComponent();
@Produce(uri = "activemq:topic:inbox")
protected ProducerTemplate template;
@EndpointInject(uri = "mock:result")
protected MockEndpoint resultEndpoint;
@Test
public void tes1() throws InterruptedException {
String headerValue= MyComponent.Value;
EmailAddress recipients = new EmailAddress("recipient@example.com");
template.sendBodyAndHeader("activemq:topic:inbox", recipients.toString(), headerValue);
resultEndpoint.expectedBodiesReceived(headerValue);
resultEndpoint.expectedHeaderReceived("header value", headerValue);
resultEndpoint.expectedMessageCount(1);
}
我很难理解如何测试CBR所规定的实际情况,但更重要的是我怀疑这是否是测试它的正确方法。 MyComponent.VALUEConstant是我的自定义组件中指定的属性,上面的测试实际上正在传递。但是,如果我在我的组件上使用不同的属性实例化headerValue,因此条件应该失败,则测试通过。你能帮忙吗?
谢谢,
我
答案 0 :(得分:1)
嗯,我能看到的第一件事就是你的简单表达式缺乏比较 - 它应该是${in.header.value} == 'wanted value'
。
就测试而言 - 这实际上取决于测试的类型。在这里,您正在进行集成测试,因此我会验证效果是否符合预期 - 数据库改变了它应该的方式等等。但由于您的路线只进行了一些记录,因此我改变了:
<log message="Cc: ${in.header.Value}" />
进入
<log message="Cc: ${in.header.Value}" />
<to uri="mock:choice-triggered" />
然后验证mock:choice-triggered
端点是否收到了消息(或者没有,取决于方案)。但是,在对现实世界路线的测试中,您可能想要验证某些数据是否已插入到数据库中,或者某些消息已发布到MQ,或者是否已发送电子邮件。