我是 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 个交换的断言。Producer 似乎从未将消息发送到我的 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]', '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。
我的书 Camel in Action 2nd edition 在整个测试章节中有更多的文档:https : //www.manning.com/books/camel-in-action-second-edition如果您正在寻找优秀的 Camel 文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句