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
当我在单元测试中使用“
mock:
”端点URL时,这是毫无用处的,因为在测试的类中,没有什么可以将其与实际端点URL联系在一起。 因此,真正的端点URL永远不会被覆盖。 当执行真实代码时,它只是将实际端点作为正常使用(目标是能够在没有外部依赖性兔子的情况下进行测试)。
我在这里错过了真正基本层面的东西吗? 似乎有一种方法可以使单元测试将假路由注入这样的类,以便测试的代码可以从实际端点切换到嘲笑端点而没有意识到。 另外,我想我可以重构代码,以便将匿名mock:...
有些人可以做什么。 您可以再次阅读有关测试的骆驼书,并注意与
使用建议Https://camel.apache.org/manual/advice-with.html.
还有
Processor
您也可以使用
mockEndpointsAndSkip
或在您的路线中使用财产占位符,然后将URI配置为模拟/存根以进行测试,然后将真实的uris使用用于生产