我有以下端点和路线。
@Bean
public CxfEndpoint requestEndpoint() {
CxfEndpoint endpoint = new CxfEndpoint();
endpoint.setAddress(SERVICE_ADDRESS);
endpoint.setServiceClass(Service.class);
endpoint.setWsdlURL(WSDL_LOCATION);
endpoint.setBus(bus);
endpoint.setProperties(endpointProperties);
return endpoint;
}
和
from("cxf:bean:requestEndpoint")
//Custom logic with various outbound routes
.choice()
....
.to("direct:route1")
....
.to("direct:route2")
我想测试一下。各种输入数据应路由到各种路由。
@RunWith(CamelSpringBootRunner.class)
@SpringBootTest
@MockEndpoints
@Configuration
public class RequestRouteTest extends CamelTestSupport {
@Autowired
private ProducerTemplate producerTemplate;
@EndpointInject(uri = "mock:direct:route1")
private MockEndpoint mockCamel;
@Test
public void myTest() throws Exception {
mockCamel.expectedMessageCount(1);
producerTemplate.sendBody("cxf:bean:requestEndpoint", bodyForRoute1);
mockCamel.assertIsSatisfied();
}
}
但在这种情况下,我有以下错误:
引起:java.net.ConnectException:ConnectException 调用 http://myurl:连接被拒绝(连接被拒绝)
这是合乎逻辑的,我没有运行该应用程序。
然后我尝试替换 cxf 端点来模拟:
MockEndpoint mockEndpoint = getMockEndpoint("mock:cxf:bean:requestEndpoint");
producerTemplate.sendBody(mockEndpoint, bodyForRoute1);
我得到了
断言:mock://direct:route1 满足 - 失败
和异常(java.lang.AssertionError: mock://direct:route1 Received message count. Expected: <1> but was: <0> ),因为我的路由代码没有被调用。
如何正确测试路线?我想尝试两种有趣的方式:
1) 使用真实的 http 端点进行测试(这允许您测试请求的早期阶段 - 例如 - 带有无效 xml 的请求)
2)POJO有效负载在消息体中时的隔离测试。
如果我的问题有解决方案,我将不胜感激