使用 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 单元测试 的相关文章

随机推荐