【发布时间】:2020-02-07 05:16:59
【问题描述】:
我是 Camel 的新手,我需要了解如何对具有两个端点的路由进行单元测试。第一个端点获取用户 ID 并将其用于第二个端点。
public RouteBuilder routeBuilder() {
return new RouteBuilder() {
@Override
public void configure() throws HttpOperationFailedException {
this.from(MyServiceConstant.ROUTE)
.setHeader(...)
.setHeader(...)
.to(MyConstants.THE_FIRST_ROUTE)
.setHeader(...)
.setHeader(...)
.process(...)
.setProperty(...)
.to(MyConstants.THE_SECOND_ROUTE)
}
};
}
所以我必须在我的测试类中同时模拟 MyConstants.THE_FIRST_ROUTE 和 MyConstants.THE_SECOND_ROUTE。我这样做了,但不确定如何编写测试。我所做的只是达到第二个端点,但不知道如何触发第一个端点。
@Produce(uri = MyServiceConstant.ROUTE)
private MyService myService;
@EndpointInject(uri = "mock:" + MyConstants.THE_FIRST_ROUTE)
private MockEndpoint mockFirstService;
@EndpointInject(uri = ""mock:" + MyConstants.THE_SECOND_ROUTE)
private MockEndpoint mockSecondService;
@Test
@DirtiesContext
public void getDetails()throws Exception {
// **The missing part**: Is this the right way to call my first service?
this.mockFirstService.setUserId("123456");
// this returns a JSON that I'll compare the service response to
this.mockSecondService.returnReplyBody(...PATH to JSON file);
UserDetail userDetailsInfo = this.myService.getUserDetails(...args)
// all of my assertions
assertEquals("First name", userDetailsInfo.getFirstName());
MockEndpoint.assertIsSatisfied();
}
【问题讨论】:
-
通常,如果您与
MockEndpoint合作,您就是define certain expectations,然后通过assertIsSatisfied()(或其兄弟姐妹之一)检查您的期望是否成立。如果其中一个路由调用外部服务,例如 HTTP 服务,则编织路由并将.to(...)替换为一些预定义的响应(假设调用的路由不是 INONLY)或添加虚假服务可能会有所帮助连接到
标签: java unit-testing apache-camel spring-camel