Apache camel 简单骆驼测试失败,未收到任何消息

Apache camel 简单骆驼测试失败,未收到任何消息,apache-camel,Apache Camel,我使用的是Spring Boot,我刚刚添加了camel 我有一个简单的骆驼路线设置: import org.apache.camel.builder.RouteBuilder; import org.springframework.stereotype.Component; @Component public class MyRoute extends RouteBuilder { @Override public void configure() throws Exception

我使用的是Spring Boot,我刚刚添加了camel

我有一个简单的骆驼路线设置:

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>
mock://file://out 收到的邮件数。预期:但是:

不确定这里会有什么问题。我有一个生产者模板,该模板将uri作为从点到端点的路由,并使用EndpointInject和mock uri模拟到端点?

如果我没有错,您模拟的是输出端点,但您的端点是文件端点。发送消息时,需要将消息放到文件端点轮询的任何位置。否则,您也需要模拟它。

已修复,但不是100%

如果我从真实路线改变路线

from("file://in").to("file://out"); 

在我的测试中

@Override
  protected RoutesBuilder createRouteBuilder() throws Exception {
    return new MyRoute();
  }
创建特定路线的步骤

最奇怪的是!必须删除:

@SpringBootTest
然后呢

private CamelContext camelContext;
然后它开始工作了

但不幸的是,这不是我需要的,仍然有一些事情需要解决,我想用我真正的prod路线

from("file://in").to("file://out");
如果可能的话,不要在路线上使用advice,而只是模仿它,用 嘲弄:file://out 在测试中,但它不起作用:( 而且,它不适用于@SpringBootTest???非常奇怪?!

您需要添加

   @Override
  public String isMockEndpoints() {
    return "*";
  }

这应该模拟所有enpoint,然后您可以使用mock:file:out,例如

sry,但我很困惑,不太确定您的想法是什么。我认为这个producerTemplate.sendBody(“测试”);将在路由中放置消息?是的,但您的路由正在侦听文件终结点而不是直接终结点。您的错误是,该路由需要一条消息,但没有收到任何消息。请将模拟终结点添加到您的文件中,并改为将消息发送到终结点mock:file:in。或者使用replaceFromWith()。请参阅此处的配置详细示例:已尝试,相同的错误,奇怪的thx,有效!仍然不确定为什么@SpringBootTest注释不起作用
   @Override
  public String isMockEndpoints() {
    return "*";
  }