gpt4 book ai didi

apache-camel - Camel 模拟 - MockEndpoint.whenAnyExchangeReceived 处理方法不执行

转载 作者:行者123 更新时间:2023-12-05 05:16:38 25 4
gpt4 key购买 nike

我有下面的示例代码,为什么 MockEndpoint.whenAnyExchangeReceived 中的 process 方法没有执行?

我希望响应是“来自模拟远程 http 调用的预期正文”,但实际响应是请求中传递的内容(“Camel rocks”)。

public class CamelMockRemoteHttpCallTest extends CamelTestSupport {

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.to("http://abc/bcd")
;
}
};
}

@Override
public String isMockEndpointsAndSkip() {
return "http://abc/bcd";
}

@Test
public void testSimulateErrorUsingMock() throws Exception {
MockEndpoint http = getMockEndpoint("mock:http://abc/bcd");

http.whenAnyExchangeReceived(new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.getOut().setBody("Expected Body from mock remote http call"); //why this line doesn't execute
}
});

String response = template.requestBody("direct:start", "Camel rocks", String.class);

assertEquals("Expected Body from mock remote http call", response); //failed, the actual response is "Camel rocks"
}
}

最佳答案

我在您的测试中添加了一些断点,看起来自动创建的模拟端点是 mock://http:abc/bcd,而不是 mock:http://abc/bcd.

要找到发生这种情况的原因,您可以查看方法 org.apache.camel.impl.InterceptSendToMockEndpointStrategy#registerEndpoint,它作为模拟端点自动注册的一部分被调用。从 http URI 中删除了 //。然后到 org.apache.camel.util.URISupport#normalizeUri 方法,其中 // 添加了 mock uri 前缀。

InterceptSendToMockEndpointStrategy 的实现中也有很好的评论,但我在文档中找不到它。

// create mock endpoint which we will use as interceptor
// replace :// from scheme to make it easy to lookup the mock endpoint without having double :// in uri

当您将其更改为 getMockEndpoint("mock://http:abc/bcd") 时,测试通过。

避免这些问题的最佳方法是将 false 作为 getMockEndpoint() 方法的第二个参数传递,如果您希望已创建端点。如果模拟端点不存在,这将抛出异常。否则将按需创建新的模拟端点。

关于apache-camel - Camel 模拟 - MockEndpoint.whenAnyExchangeReceived 处理方法不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50201617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com