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

Camel replaceFromWith和模拟JMS目的地-Spring Boot

吉玉石
2023-03-14

我已经检查了行动2第9章示例中的Camel,并查看了之前的问题和用户组线程,但仍然卡住了。。。

我正在使用Spring引导和骆驼2.18.x,我试图将骆驼示例代码中的两个示例合并为一个:模拟endpoint并替换来自

工作场景:

  1. 我创建一个测试路由

工作场景:

  1. 我改变了目的地,直接--

期望:我假设JMS将被mock所取代,日志似乎也是这样表明的。不知道为什么JMSProducer会被调用。这是预期行为吗?

路线示例:

    from("direct:start")
            .id("testroute")
            .log("${body}")
            //.to("seda:finish")   //This works okay
            .to("jms:XYZ_Q")
     ;

单元测试类:

@RunWith(CamelSpringBootRunner.class)
@MockEndpoints
@UseAdviceWith
@SpringBootTest(classes = {UnitTestApplication.class, SampleTest.class})
public class SampleTest {

    @Autowired
    private CamelContext camelContext;

    @Autowired
    private ProducerTemplate producerTemplate;

    @Test
    public void test01() throws Exception {
        RouteDefinition route = camelContext.getRouteDefinition("testroute");
        AdviceWithRouteBuilder adviceWithRB = new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                replaceFromWith("direct:renamed");
            }
        };

        route.adviceWith(camelContext, adviceWithRB);
        camelContext.start();

        producerTemplate.sendBody("direct:renamed", "  8888888820130601");
    }
}

我预计JMS组件不会尝试做任何事情,而是会被mock替换。这是不是一种不正确的理解?

共有1个答案

翁良弼
2023-03-14

我假设 JMS 将被模拟所取代

>

  • 不,它不会被替换,因为“用(..)替换路由的输入(来自(..))是用新的终结点 URI 替换的。它应该在以下情况下工作(使用您的示例):

    from("jms:XYZ_Q")
        .id("testroute")
        .log("${body}");
        //.to("seda:finish")   //This works okay
        //.to("jms:XYZ_Q")
    

    如果您想模拟. to("jms:XYZ_Q")部分(来自您的问题),那么您可以使用weaveByIdToString()weaveById()等函数。更多信息:http://camel.apache.org/advicewith.html#AdviceWith-UsingAdviceWithRouteBuilder

  •  类似资料:
    • 问题内容: 有一条消息(文本),我肯定知道其格式和内容。 目前,已经实现了Java类,该类从文件中解析并读取此消息。 在现实世界中,此消息将来自消息队列。 现在,我应该在本地PC上模拟,模拟或生成Message Queue,以进行测试。 Java规范(java jms ): 关于此规范,我需要 JMS provider 。 JMS客户端 -这是我的类,它读取消息。 消息 本身,我知道。 那么问题是

    • 在安装到AEM 5.6.1实例之前,我正在使用maven构建和测试我的代码。我已经编写了单元测试,这些测试使用wcm的实现从aem模拟中获益。io和其他需要使用powermockito模拟静态方法的单元测试。 以下是我对aem上下文、sling Mock和powermock的maven依赖关系。 在我的课堂上,我正在为aem上下文设置规则,并准备一些用于模拟的静态类: 当我通过命令行运行mvn测试

    • GPS芯片和加速计可能很难测试,因为大多数台式机没有它们。Chrome DevTools传感器模拟窗格通过模拟常见的移动设备传感器来降低了测试的开销。 TL;DR 模拟地理位置坐标以测试地理位置覆盖。 模拟设备方向来测试加速计数据。 访问传感器控制 要访问 Chrome DevTools 的 传感器控件: 打开DevTools 的main menu(主菜单),然后 在More Tools(更多工具

    • 我有Spring启动应用程序,它通过注释从组件类中侦听 IBM MQ 队列。MQ 属性(主机名、通道、端口等)是从 yaml 文件设置的。 MQ 依赖项在分级构建中添加,如下所示: 这可以正常工作,只要我使用Tomcat容器在本地运行应用程序即可侦听消息。但是,如果我将其打包为 EAR 并部署到 Wesbphere8.5 服务器,它将引发以下异常,并且侦听器未从队列中读取消息。我确认所有运行时依赖

    • 问题内容: 由于外部库不公开接口(因此不是可模拟的),而仅公开纯函数,因此我很难在Go中编写单元测试。即使像Google这样的大公司也没有,所以我想知道我的方法是否足够好。库不是提供s而不是仅提供函数的包以便用户模拟它们的好习惯吗? 到目前为止,我想到的解决方案是将这些程序包与接口的实现包装在一起,但这似乎工作量太大。 我举一个例子。我的功能可能看起来像这样 其中session是一个导入的包,返回

    • 我试图编写一些基本的backingBean测试,但我一直在模仿UserContext和facesContext。 此代码在我尝试测试的代码中: 在另一段代码中,我得到了以下内容: 如何在标准jUnit测试中仅使用mockito来模拟这些?还是必须使用PowerMock之类的工具?