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

回到顶部