2017-06-02 8 views
1

現在、Camelの模擬コンポーネントと連携しているImは、既存のルートでテストしたいと思います。基本的には、アプリに定義されている既存のルートを保持したいが、テスト中にいくつかの模擬テストを挿入して、現在の交換内容を確認するか、少なくとも確認する。モックで既存のラクダのエンドポイントをテストする方法は?

ドキュメントとApache Camel Cookbookに基づいています。

@RunWith(SpringRunner.class) 
@SpringBootTest 
@MockEndpoints 
public class MockedRouteStubTest { 

    @Autowired 
    private ProducerTemplate producerTemplate; 

    @EndpointInject(uri = "mock:direct:foo") 
    private MockEndpoint mockCamel; 

    @Test 
    public void test() throws InterruptedException { 
     String body = "Camel"; 
     mockCamel.expectedMessageCount(1); 

     producerTemplate.sendBody("direct:stub", body); 

     mockCamel.assertIsSatisfied(); 
    } 

} 

メッセージカウントが0であることがより次のようになります。私はここでは、ルートビルダー

@Component 
public class MockedRouteStub extends RouteBuilder { 

    private static final Logger LOGGER = LoggerFactory.getLogger(MockedRouteStub.class); 

    @Override 
    public void configure() throws Exception { 
     from("direct:stub") 
      .choice() 
       .when().simple("${body} contains 'Camel'") 
        .setHeader("verified").constant(true) 
        .to("direct:foo") 
       .otherwise() 
        .to("direct:bar") 
       .end(); 

     from("direct:foo") 
      .process(e -> LOGGER.info("foo {}", e.getIn().getBody())); 

     from("direct:bar") 
      .process(e -> LOGGER.info("bar {}", e.getIn().getBody())); 

    } 

} 

はここに私のテスト(現在はそのspringbootプロジェクト)だだ@MockEndpoints

を使用しようとしました@MockEndpointsはトリガーされません。

c.i.InterceptSendToMockEndpointStrategy : Adviced endpoint [direct://stub] with mock endpoint [mock:direct:stub] 

... 
     @Autowired 
     private CamelContext context; 

     @Before 
     public void setup() throws Exception { 
      context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() { 

       @Override 
       public void configure() throws Exception { 
        mockEndpoints(); 
       } 
      }); 
     } 

起動ログはそのアドバイスが所定の位置にあることを示す: はまた、ログは、ログは、私が試した代替がアドバイスを使用することです

route.MockedRouteStub : foo Camel 

トリガーされることを示しています

しかし、私のテストは、メッセージ数= 0で失敗します。

+0

を、私は同じ質問がありました。私はこのようにしました。私の答えをここで確認してください https://stackoverflow.com/questions/42275732/spring-boot-apache-camel-routes-testing/44325673#44325673 – pvpkiran

+0

Camelアノテーションを作成するには '@RunWith(CamelSpringRunner)'を使う必要があります有効になりました。 –

+0

@ClausIbsenは、 'SpringRunner'の代わりに' CamelSpringRunner'で試しましたが、私はまだ0の予想メッセージ数を得ています。また、ログはメッセージが直接に送られたことを示しています:foo – geneqew

答えて

1

私が持っているセットアップのために働いた答え。

RouteBuilderを変更することなく、テストはこのようなものになります。

@RunWith(CamelSpringBootRunner.class) 
@SpringBootTest 
@MockEndpoints 
public class MockedRouteStubTest { 

    @Autowired 
    private ProducerTemplate producerTemplate; 

    @EndpointInject(uri = "mock:direct:foo") 
    private MockEndpoint mockCamel; 

    @Test 
    public void test() throws InterruptedException { 
     String body = "Camel"; 
     mockCamel.expectedMessageCount(1); 

     producerTemplate.sendBody("direct:stub", body); 

     mockCamel.assertIsSatisfied(); 
    } 

} 
関連する問題