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

@MockEndpoint sAndSkip不解析动态模式

虞展
2023-03-14

我正在尝试用camel-routes应用程序为我的Spring Boot编写单元测试。我的路由生产者是Kafkaendpoint,URI在应用程序中定义。属性文件。我试图模拟这个Kafka生产者endpoint,但它没有解析URI值。

@RunWith(SpringRunner.class)
@SpringBootTest
@MockEndpointsAndSkip("kafka:${kafka.servers}?*")
public class MyApplicationTests {
    @Autowired
    private CamelContext camelContext;
      ........
      //Some debug code
      // list available endpoints
      camelContext.getEndpoints().forEach((Endpoint endpoint) -> log.info("Endpoint="+endpoint));
      .............
}

在上面的psedoocode中,Kafka。在应用程序中定义了@MockEndpointsAndSkip注释的服务器值。属性文件为kafka。服务器=本地主机:9092

打印endpoint列表时,我会看到未解析的值endpoint=mock://kafka:${kafka.servers}

我希望:endpoint=mock://kafka:localhost:9092

这是错误的做法吗?

Thanx提前提供任何帮助!!

这是我的骆驼路线,我想使用MockEndpoint进行单元测试:

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': 'test@gmail.com', 'data': 'ABC1234'}";

        notiProducer.sendBody(mockKafka, payload);

        mockDirect.assertIsSatisfied();

    }

}

共有1个答案

百里星纬
2023-03-14

您应该使用Camel的属性占位符语法

{{key}}

所以应该是这样

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

参见以下文档:http://camel.apache.org/using-propertyplaceholder.html

Camel不能使用${key},因为它与Spring冲突:http://camel.apache.org/how-do-i-use-spring-property-placeholder-with-camel-xml.html

 类似资料:
  • 问题内容: 亲爱的我是Angularjs的新手,我正在用Angular创建模式。我在网上发现的一个例子如下,我很难理解 我感到困惑的是我已经作为函数参数接收的cartObj通过依赖注入传递给我的控制器。但是,为什么我必须创建一个名为cartObj的函数并返回该变量。似乎令人困惑。谁能帮忙吗? 问题答案: 这是逐行细分: 正在创建一个名为checkout的$ scope变量,该变量引用一个函数,以便

  • 问题内容: 我有一个yaml文件,当前写为: 但是,此yaml文件经常更改,因此每次可以使用不同的值添加新条目: 我从使用gopkg.in/yaml.v2包开始就知道,如果所有值都相同,我可以解析yaml文件,例如: 在上面的示例中,它仅适用于密钥/狗密钥,而不适用于其他密钥。 当新值经常添加到yaml文件中时,如何在Go中执行此操作? 谢谢 问题答案: 如果您现在不精确的结构,则应该使您的结构看

  • 问题内容: 我如何解析这个json对象: 我可以有N个端口,每个端口的值始终是key:value对。 到目前为止,我已经尝试过了: 有了这个我得到键(0,1),但值是空的。 我也尝试过这个: 但也不行。 这就是我解码json对象的方式: 问题答案: 使用此类型: 游乐场的例子 笔记: 字段名称非常匹配。我使用字段名称“ Ports”来匹配JSON文本中使用的名称。 Go类型在JSON中应具有相同级

  • 我在寻找一个简单的解决方案。 我有一个xml文件: 我想做一个动态解析器。 我知道我可以用org.w3c.dom.*读取xml,org.w3c.dom.Node.getTextContent()我可以得到标签的值。 有什么建议吗? [编辑]通过反思: 变量“clazz”是java.lang.类,对吗?我怎么能转换文本内容值(在字符串)到任何包装类型? valueOf可能是我可以使用反射调用的通用方

  • 本文向大家介绍Java简单实现动态代理模式过程解析,包括了Java简单实现动态代理模式过程解析的使用技巧和注意事项,需要的朋友参考一下 基本知识:JDK动态代理是java.lang.reflect.*包提供的方式,它必须借助一个接口才能生成代理对象. 步骤: 1、首先建一个接口类,并提供一个实现类: 2、创建一个代理类,必须要实现InvocationHandler类 3、测试类 结果: add方法

  • 本文向大家介绍YII动态模型(动态表名)支持分析,包括了YII动态模型(动态表名)支持分析的使用技巧和注意事项,需要的朋友参考一下 本文分析了YII动态模型(动态表名)支持机制。分享给大家供大家参考,具体如下: 给YII 框架增加动态模型支持 Yii框架中的数据模型使用静态机制,如果要使用模型方式操作某张数据表,就必须得事先创建数据表对应的模型类(位于 protected/models 目录下),