Spring Boot Apache Camel路由测试
我有一个Springboot应用程序,在其中配置了一些骆驼路线。
public class CamelConfig {private static final Logger LOG = LoggerFactory.getLogger(CamelConfig.class);
@Value("${activemq.broker.url:tcp://localhost:61616}")
String brokerUrl;
@Value("${activemq.broker.maxconnections:1}")
int maxConnections;
@Bean
ConnectionFactory jmsConnectionFactory() {
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(new ActiveMQConnectionFactory(brokerUrl));
pooledConnectionFactory.setMaxConnections(maxConnections);
return pooledConnectionFactory;
}
@Bean
public RoutesBuilder route() {
LOG.info("Initializing camel routes......................");
return new SpringRouteBuilder() {
@Override
public void configure() throws Exception {
from("activemq:testQueue").to("bean:queueEventHandler?method=handleQueueEvent");
}
};
}
}
我想测试一下从activemq:testQueue到queueEventHandler :: handleQueueEvent的路由,
我尝试了这里提到的其他事情http://camel.apache.org/camel-
test.html,但是似乎没有起作用。
我正在尝试做这样的事情
@RunWith(SpringRunner.class)@SpringBootTest(classes = {CamelConfig.class, CamelTestContextBootstrapper.class})
public class CamelRouteConfigTest {
@Produce(uri = "activemq:testQueue")
protected ProducerTemplate template;
@Test
public void testSendMatchingMessage() throws Exception {
template.sendBodyAndHeader("testJson", "foo", "bar");
.....
..... verify handleQueueEvent method is called on bean queueEventHandler by mocking
}
但是我的ProducerTemplate始终为null。我尝试了自动装配Camelcontext,对此我遇到了一个异常,说它无法解析camelContext。但这可以通过将SpringCamelContext.class添加到@SpringBootTest类来解决。但是我的ProducerTemplate仍然为null。
请提出建议。我正在使用骆驼2.18 Springboot 1.4
回答:
这就是我最终做到的方式
@RunWith(SpringRunner.class)public class CamelRouteConfigTest extends CamelTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(CamelRouteConfigTest.class);
private static BrokerService brokerSvc = new BrokerService();
@Mock
private QueueEventHandler queueEventHandler;
@BeforeClass
//Sets up a embedded broker.
public static void setUpBroker() throws Exception {
brokerSvc.setBrokerName("TestBroker");
brokerSvc.addConnector("tcp://localhost:61616");
brokerSvc.setPersistent(false);
brokerSvc.setUseJmx(false);
brokerSvc.start();
}
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new CamelConfig().route();
}
// properties in .yml has to be loaded manually. Not sure of .properties file
@Override
protected Properties useOverridePropertiesWithPropertiesComponent() {
YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
try {
PropertySource<?> applicationYamlPropertySource = loader.load(
"properties", new ClassPathResource("application.yml"),null);// null indicated common properties for all profiles.
Map source = ((MapPropertySource) applicationYamlPropertySource).getSource();
Properties properties = new Properties();
properties.putAll(source);
return properties;
} catch (IOException e) {
LOG.error("application.yml file cannot be found.");
}
return null;
}
@Override
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry jndi = super.createRegistry();
MockitoAnnotations.initMocks(this);
jndi.bind("queueEventHandler", queueEventHandler);
return jndi;
}
@Test
// Sleeping for a few seconds is necessary, because this line template.sendBody runs in a different thread and
// CamelTest takes a few seconds to do the routing.
public void testRoute() throws InterruptedException {
template.sendBody("activemq:productpushevent", "HelloWorld!");
Thread.sleep(2000);
verify(queueEventHandler, times(1)).handleQueueEvent(any());
}
@AfterClass
public static void shutDownBroker() throws Exception {
brokerSvc.stop();
}
}
以上是 Spring Boot Apache Camel路由测试 的全部内容, 来源链接: utcz.com/qa/430954.html