在Apache Camel应用程序中,单元测试如何用真实的端点注入模拟端点? 我正在用Apache Camel实施消息转换器模式,以从静止的端点消耗消息并将其发送到AMQP端点。 封闭应用程序基于春季

问题描述 投票:0回答:1
包装应用程序基于Spring启动,因此我使用Camel的“

spring-boot”组件来集成两个框架。 正如该文档在这个弹簧启动链接中所建议的那样,我正在实现我的骆驼路线,该路由在@Configuration

RouteBuilder 我的问题涉及如何进行单元测试此翻译,而无需实际的安息端点或配置的RabbitMQ经纪人? 我已经阅读了许多在线示例以及Action书籍中的

卡梅尔...似乎单位测试骆驼路线的典型方法是将路线切入您的单元测试,然后用“
@Component public class MyRestToAmqpRouter extends RouteBuilder { @Override public void configure() throws Exception { from("jetty:http://my-restful-url") .process(exchange -> { // convert the message body from JSON to XML, take some // incoming header values and put them in the outgoing // body, etc... }).to("rabbitmq://my-rabbitmq-url"); } }
”替换一个或多个端点URL。

我猜想

索尔塔(Sorta
我试图用模拟的一些基于春季的单元测试示例,例如:

mock:whatever 我希望是,骆驼会从单元测试中获取这些端点URL,将其注册为模拟...然后在实际代码尝试使用这些URL时使用模拟而不是实际终点。

,无论如何,我不确定这是可能的。  当我在单元测试中使用真实URL时,我会得到
@RunWith(CamelSpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {Application.class}) public class MyRestToAmqpRouterTest extends AbstractJUnit4SpringContextTests { @Produce(uri = "jetty:http://my-restful-url") private ProducerTemplate fakeRest; @EndpointInject(uri = "rabbitmq://my-rabbit-url") private MockEndpoint fakeRabbit; @Test @DirtiesContext public void testRouter() throws InterruptedException { fakeRabbit.expectedMessageCount(1); fakeRest.sendBodyAndHeader("", "header-1", "some value"); fakeRabbit.assertIsSatisfied(); } }

,因为您显然无法将“真实”端点URL注入

IllegalArgumentException实例(仅带有“MockEndpoint

”的URL)。

当我在单元测试中使用“
mock:
”端点URL时,这是毫无用处的,因为在测试的类中,没有什么可以将其与实际端点URL联系在一起。 因此,真正的端点URL永远不会被覆盖。 当执行真实代码时,它只是将实际端点作为正常使用(目标是能够在没有外部依赖性兔子的情况下进行测试)。 我在这里错过了真正基本层面的东西吗? 似乎有一种方法可以使单元测试将假路由注入这样的类,以便测试的代码可以从实际端点切换到嘲笑端点而没有意识到。 另外,我想我可以重构代码,以便将匿名

mock:...

升至独立类……然后我可以单位单位测试其翻译逻辑,独立于路线。 但这似乎是一个不完整的测试。

有些人可以做什么。
您可以再次阅读有关测试的骆驼书,并注意与
使用建议
Https://camel.apache.org/manual/advice-with.html

.

还有

Processor


java spring apache-camel spring-boot eai
1个回答
5
投票

您也可以使用

mockEndpointsAndSkip
    组件
  • https://camel.apache.org/components/4.8.x/stub-component.html

或在您的路线中使用财产占位符,然后将URI配置为模拟/存根以进行测试,然后将真实的uris使用用于生产


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.