我试图用camel对我的一个路由执行单元测试,但是我找不到一种方法来检查从我的路由接收到的主体,并检查它是否是预期的。我如何使用或不使用模拟来执行此操作?
路线
@Component
public class MyRoute extends RouteBuilder {
@Override public void configure() throws Exception {
from("direct:MyRoute")
.routeId("MyRoute")
.marshal().json(JsonLibrary.Jackson)
.log("Marshal to \n${body}");
}
}
测试
public class MyRouteTest extends CamelTestSupport {
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new MyRoute();
}
@Test
public void testRoute() throws Exception {
NotifyBuilder notify = new NotifyBuilder(context).whenDone(1).create();
Map<String,Object> map = new LinkedHashMap<>();
map.put("name","your_name");
template.sendBody("direct:MyRoute", map);
assertTrue(notify.matchesWaitTime());
}
}
1条答案
按热度按时间5uzkadbs1#
使用mocks
您可以使用
AdviceWith
和weaveAddLast
将mock:result
添加到路由的末尾。然后使用注入的MockEndpoint为交换定义Assert。MockEndpoint提供了许多方便的方法,您可以使用它们来检查交换的有效性。当使用AdviceWith修改测试路由时,请记住使用@UseAdviceWith注解,并在每次测试之前手动启动CamelContext。这是为了避免不必要的建议路由重新启动。
如果你想进一步检查交换,你可以从MockEndpoint的交换列表中获取它。下面是如何以String的形式获取第一个交换的主体的示例。
无mocks
您可以使用
ProducerTemplate.send
方法返回结果交换。然而,该方法希望您提供可以使用DefaultExchange
类创建的交换对象,而不是任何类型的主体。RouteBuilder
示例使用Apache Camel版本3.20.2