提问者:小点点

简单骆驼测试失败,没有收到消息


我使用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?


共3个答案

匿名用户

已修复但不是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轮询的任何地方。否则,您也需要模拟它。