使用 MockEndPointsandSkip 进行 Camel 单元测试

2024-02-11

我是 Camel 新手,正在尝试一些代码来了解 MockEndpoints 功能的工作原理,但它不起作用。以下是我想使用 MockEndpoints 进行单元测试的 Camel 路线。属性值在 application.properties 文件中定义。

from("kafka:{{kafka.servers}}?topic={{kafka.consumer.topic}}&groupId={{kafka.consumer.groupId}}")
    .to("direct:notify");

from("direct:notify")
    .log("direct:notfy");

这是我的测试代码,未收到 1 个交换的断言。生产者似乎从未将消息发送到我的 Kafka Mockendpoint:

@RunWith(SpringRunner.class)
@SpringBootTest
@MockEndpointsAndSkip("kafka:{{kafka.servers}}?*|direct:notify")
public class NotificationApplicationTests {     

    @Autowired
    private CamelContext context;

    @Value("${kafka.servers}")
    private String kafkaServers;

    @EndpointInject(uri="mock:kafka:{{kafka.servers}}")
    private MockEndpoint mockKafka;

    @EndpointInject(uri="mock:direct:notify")
    private MockEndpoint mockDirect;

    @Autowired
    private ProducerTemplate notiProducer;

    @Test
    public void testMockEndpoints() throws Exception{                                       

        mockDirect.setExpectedMessageCount(1);
        mockDirect.whenAnyExchangeReceived( (Exchange exchange) -> {
            //NEVER GETS HERE!!
            log.info("MOCK DIRECT exchange received");          
        });     

        String payload = "{'email': '[email protected] /cdn-cgi/l/email-protection', 'data': 'ABC1234'}";

        notiProducer.sendBody(mockKafka, payload);

        mockDirect.assertIsSatisfied();

    }

}

如果您希望模拟端点是正则表达式,则您的模拟端点是错误的。

@MockEndpointsAndSkip("kafka:{{kafka.servers}}?*|direct:notify")

请注意使用*在正则表达式中。由于它不是通配符,您通常需要使用.*匹配 0..n 个字符。更多地了解正则表达式,也许可以使用正则表达式测试器,您可以在线找到它或将其作为插件安装在 Java 编辑器中。

另外,如果你想替换以kafka开头的路由,那么你需要做其他事情@MockEndpointsAndSkip不是为了开始。但为了发送。查看关于replaceFrom在测试建议部分:http://camel.apache.org/advicewith.html http://camel.apache.org/advicewith.html.

我的书《Camel in Action》第二版在整个测试章节中有更多文档:https://www.manning.com/books/camel-in-action-second-edition https://www.manning.com/books/camel-in-action-second-edition如果您正在寻找优秀的 Camel 文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MockEndPointsandSkip 进行 Camel 单元测试 的相关文章

  • Apache Camel超时同步路由

    我正在 trwing 使用 Apache Camel 构造一个带有超时的同步路由 但我在框架中找不到任何可以解析它的内容 所以我决定建立一个为我制作的流程 public class TimeOutProcessor implements P
  • Camel Quartz 在路由启动时路由不需要的作业执行

    我有几条路线看起来像 from quartz getJobId cron cronExpression stateful true routeId getJobId autoStartup false to getRouteTo 这些路由可
  • 使用骆驼的电源模拟时出现问题

    由于我必须模拟静态方法 所以我使用电源模拟测试我的应用程序 我的应用程序使用 骆驼2 1 2 我定义路线XML被读取的是骆驼泉语境 没有出现任何问题的时候Junit单独用于测试 使用电源模拟时 我收到帖子末尾列出的错误 我还列出了使用的 X
  • 异常未传播到 Apache Camel 中的错误处理程序

    我有一条定义 doTry doCatch 块的路线 当在 doCatch 块中处理异常时 我希望将其传播到错误处理程序 以确保消息在本地处理后添加到死信队列中 问题是我无法让错误处理程序的传播正常工作 defaultErrorHandler
  • Camel从类路径资源读取文件?

    我在 Spring Boot 应用程序的 resources file txt 的类路径上有一个文件 我如何在骆驼路线中引用它 我努力了 from file resource classpath fileName file txt 及其变体
  • 如何使用 autoStartup=false 启动 Camel 路线

    我想使用以下命令来控制我的路线何时启动RoutePolicy 因此 我将其定义为autoStartup false
  • 如何在骆驼单元测试中模拟多个组件?

    我正在使用CamelTestSupport在骆驼版本 2 13 1 中 我想做这样的事情来模拟两个不同的组件 Override public String isMockEndpoints return activemq exec 我不能只是
  • 骆驼聚集策略

    我正在解析一个 CSV 文件 将其分割并通过骆驼中的多个处理器进行路由 有两个端点 一个有错误的数据 而另一个有经过验证的数据 我需要汇总数据的建议 假设 CSV 文件有 10 条记录 其中 6 条到达一个端点 4 条到达另一个端点 我如何
  • 如何解决Apache Camel中的“无法创建路由route1异常”?

    我对 Apache Camel 概念很陌生 我尝试使用 apache Camel API 编写示例代码 当我尝试运行代码时 出现以下异常 谁能帮我解决这个问题 缺少依赖库 所以我添加了这些库并解决了我的问题
  • 使用 MockEndPointsandSkip 进行 Camel 单元测试

    我是 Camel 新手 正在尝试一些代码来了解 MockEndpoints 功能的工作原理 但它不起作用 以下是我想使用 MockEndpoints 进行单元测试的 Camel 路线 属性值在 application properties
  • Camel - 将特定参数从路由传递到通用 bean 方法

    假设我有一条骆驼路线 如下所示 from direct myRoute setHeader someHeader simple some header value beanRef myBean beanMethod 我有一颗豆子cannot
  • Camel 中的无限循环 - Rabbitmq

    我有一个小型服务器路由 它从queue in 获取消息并放入queue out 当我输入一条消息时queue in 服务器无限循环运行 我想知道我在配置方面缺少什么 这看起来是一条非常简单的路线 小服务器路由
  • Apache Camel 路由中的 Spring Boot 属性使用

    是否可以在 Apache Camel 路由中使用 Spring Boot 属性 Value 工作正常 但这是否可以直接放置表达式的占位符 Update 我知道 PropertiesComponent 但这将是除了我不喜欢的 Applicat
  • 使用 Camel 的表达式语言获取并格式化昨天的日期

    我在 Camel 的路径中使用日期 fileName date now dd MM yyyy 但我现在需要的是 1天 那可能吗 嗯 不直接 简单语言中的 date 对象只能获取当前时间 或者您放置在标头中的某个时间值 您可以在 java 或
  • 使用Java DSL的Camel CXF POJO模式

    我有一个预先存在的 Web 服务 连接 SOAP 如果可能的话 我想在不使用 Swing 框架的情况下进行调用 我遵循接触优先开发 使用 cxf wsdl2java 工具生成我的 java 文件 我希望从 java 对象中提取用户名和密码并
  • 从 HTTP 端点发送消息到 JMS

    我正在尝试使用骆驼路由 它将接受 http 端点上的有效负载 然后将该有效负载写入 JMS 队列 到目前为止我所拥有的路线如下 但是一条空消息被传递到 jms 队列 消息到达那里 但没有正文 路线如下
  • Apache Camel 同时处理两个 csv 文件

    我正在尝试处理两个 csv文件并将其数据保存到数据库中 我使用的是 java dsl 而不是 spring 为了更好地解释这个场景 我正在读两本 csv文件并处理它们以将数据上传到 sql 数据库中 我为此执行的步骤是 在 servlet
  • 使用 apache Camel 读取 gmail 收件箱中的所有邮件

    我正在尝试阅读来自谷歌邮件 Gmail imaps 帐户的所有邮件并下载其附件 但我只能收到一封未读邮件及其附件 发布我的代码片段 Download function public void download throws Exceptio
  • 为什么我的 Camel Netty 路由会在 JMS 消息的开头添加换行符?

    我有一个 Camel Netty 路由 它将 XML 发送到服务器端口并将其放入 JMS 消息中 在第一条消息之后 所有其他消息的顶部都有一个换行符 导致当 GUI 收到它时 我的 XML 无法解组 我的路线是这样的
  • Camel Sql 大型数据集的消费者性能

    我正在尝试在 Ignite 缓存中缓存一些静态数据 以便更快地查询 因此我需要从 DataBase 读取数据 以便将它们插入到缓存集群中 但是行数约为 300 万 通常会导致 OutOfMemory 错误 因为 SqlComponent 试

随机推荐