我使用Spring靴,我刚刚添加了骆驼。
我有一个简单的骆驼路线设置:
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@Component
public class MyRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file://in").to("file://out");
}
}
当我尝试为这条路线创建简单的测试时:
@RunWith(CamelSpringBootRunner.class)
@SpringBootTest
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class MyRouteTest extends CamelTestSupport {
@Autowired
private CamelContext camelContext;
@Produce(uri = "file://in")
private ProducerTemplate producerTemplate;
@EndpointInject(uri = "mock:file://out")
private MockEndpoint mockEndpoint;
@Test
public void routeTest() throws Exception {
mockEndpoint.expectedMessageCount(1);
producerTemplate.sendBody("Test");
mockEndpoint.assertIsSatisfied();
}
}
它失败了
mock://file://out Received message count. Expected: <1> but was: <0>
不确定这里可能有什么问题。我有生产者模板,它将uri作为我从点的路由,并且正在使用Endpoint Inject和模拟uri模拟endpoint?
已修复但不是100%
如果我改变路线
from("file://in").to("file://out");
到
from("file://in").to("mock:out");
在我的测试控制中
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new MyRoute();
}
来创建特定的路由
最奇怪的是!不得不删除:
@SpringBootTest
在那之后
private CamelContext camelContext;
然后它开始工作了!
但不幸的是不是我需要的,仍然有东西需要修复,我想用我真正的prod路线!
from("file://in").to("file://out");
如果可能的话,不要在路由上使用建议,而是模拟它,在测试中尝试使用mock: file://out,但它不起作用:(而且,它不适用于@SpringBootTest???非常奇怪?!
您需要添加
@Override
public String isMockEndpoints() {
return "*";
}
这应该模拟所有的节点,然后您可以使用mock: file:out例如
如果我没有搞错的话,你正在模拟你的输出endpoint,但你的endpointendpoint是一个文件endpoint。当您发送消息时,您需要将消息拖放到文件endpoint轮询的任何地方。否则,您也需要模拟它。