我正在使用Camel完成我的第一步,目前正致力于使用jms作为传输来编写简单的junit测试。
这是我写的代码:
public class FirstMockTest extends CamelTestSupport {
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("jms:topic:quote")
.to("mock:quote");
}
};
}
@Test
public void testMessageCount() throws InterruptedException {
MockEndpoint mockEndpoint = getMockEndpoint("mock:quote");
mockEndpoint.setExpectedMessageCount(1);
template.sendBody("jms:topic:quote", "Camel rocks");
mockEndpoint.assertIsSatisfied();
}
}
由于缺少connectionFactory,我得到以下异常:
org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route(route1)[[From[jms:topic:quote]] -> [To[mock:quote]]] because of connectionFactory must be specified
我可以修复它,在我的路线中添加以下行:
ConnectionFactory connectionFactory =
new ActiveMQConnectionFactory("vm://localhost?roker.persistent=false");
context.addComponent("jms", JmsComponent.jmsComponent(connectionFactory));
但我不喜欢我在路线中添加一些组件到我的上下文。此外,如果我想要另一条路线,我将需要再做一次。 显然,应该有另一种方式来告诉我关于连接工厂的测试。
提前谢谢!
答案 0 :(得分:0)
由于正在编写junit,因此如果对jms端点进行存根,则可以避免创建ConnectionFactory。您可以将端点命名为stub:jms:topic:quote。看一下链接https://github.com/camelinaction/camelinaction2/blob/master/chapter9/mock/src/test/java/camelinaction/FirstMockTest.java
的示例示例