当前位置: 首页 > 知识库问答 >
问题:

如何在Camel测试中模拟AMQP消费者?

燕扬
2023-03-14

说我有以下路线:

from(rabbitMQUri)
    .to(myCustomerProcessor)
    .choice()
        .when(shouldGotoA)
            .to(fizz)
        .when(shouldGotoB)
            .to(buzz)
        .otherwise()
            .to(foo);

让我们假设MyCustomProcessor根据RabbitMQ使用的消息调整ShouldGotoaShouldGotob

我想对3个场景进行单元测试:

    null

我的问题是:如何模拟/存根RabbitMQendpoint,以便路由在生产中正常执行,但不必实际将测试连接到RabbitMQ服务器?我需要某种“模拟信息”制作人。

一个代码示例或代码片段将非常有帮助,非常感谢!

共有1个答案

东郭自强
2023-03-14

这是组合一个合适的测试的一种方法。

首先定义一个空的Camel上下文,其中只有一个ProducerTemplate:

<camel:camelContext id="camelContext">
   <camel:template id="producerTemplate" />
</camel:camelContext>

这样做是为了当我执行测试时,我可以控制哪些路由实际上开始,因为我不希望所有的路由在测试期间开始。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/spring/spring-test-camel.xml" })
public class MyTest {

    @Autowired
    private ProducerTemplate producerTemplate;

    @Autowired
    private CamelContext camelContext;
camelContext.removeComponent("jms");
camelContext.addComponent("jms", this.camelContext.getComponent("seda"));
camelContext.addRoutes(this.documentBatchRouting);
producerTemplate.sendBody("jms:MyQueue", 2);

需要注意的两点是:

>

  • 您的事务边界可能会改变,特别是如果您用直接组件替换JMS队列

    如果您要测试几条路由,那么在测试结束时必须小心地将该路由从Camel上下文中移除。

  •  类似资料:
    • spring bean xml 有几个使用真实对象预先编写的测试用例。有没有办法我可以模拟这个类B,得到注入类A和模拟几个方法?我只想在我的测试用例中这样做,以便预先编写的测试用例不受影响?

    • 所以我第一次在spring boot测试时遇到了一个问题。当我执行测试时,这些值实际上被删除了。我更愿意对此进行模拟,这样这些值就不会被删除。 我的测试类:@SpringBootTest@AutoConfiguremockMVC

    • 我有一个驼峰endpoint,基本上是Kafka消费者从一个主题中读取信息并将其发送到数据库。它工作得很好,但是,我很难对它进行单元测试,因为我无法模拟Kafkaendpoint。有谁能帮我在骆驼路线上嘲笑Kafka的消费者吗?

    • 问题内容: 我正在使用RestTemplate 方法发布到端点。在我的测试文件中,我正在测试POST方法。但是用我目前的测试,我得到了POST请求。在测试文件中发出POST请求时,我需要模拟API的帮助 这是我的主文件 这是我的测试文件 问题答案: 您正在测试DataTestRepo类内部的逻辑,因此您不应模拟它。RestTemplate是DataTestRepo内部的一个依赖项,因此这正是您需要

    • 我有以下场景:有3个rabbitmq队列,生产者根据消息的优先级将消息推送到这些队列。(myqueue_high,myqueue_medium,myqueue_low)我希望有一个可以按顺序或优先级从这些队列中提取的单一使用者,即只要消息在那里,它就一直从高队列中提取。它是从介质中拉出来的。如果medium也是空的,它从Low拉出。 我如何实现这一点?我需要编写自定义组件吗?

    • 问题内容: 我有一个Java命令行程序。我想创建JUnit测试用例以进行模拟。因为当我的程序运行时,它将进入while循环并等待用户输入。如何在JUnit中模拟呢? 问题答案: 从技术上讲,可以进行切换,但是总的来说,不直接在代码中调用它,而是添加一层间接层,这样输入源就可以从应用程序的某个位置进行控制,这样会更健壮。确切地讲,这是实现的详细信息-依赖项注入的建议很好,但是你不一定需要引入第三方框