Hello,

Please see this thread:
http://camel.465427.n5.nabble.com/spring-boot-test-mocks-td5773902.html

In summary, @MockEndpoints and @MockEndpointsAndSkip are not supported
in Camel thus far (2.16.0).

On Fri, Nov 13, 2015 at 2:08 PM, Kai Broszat <kai.bros...@kewill.com> wrote:
> Hi,
> I want to test a complex route that involves sending messages to ActiveMQ and 
> calling webservices with SpringWs.
> The route itself is working fine using spring-boot (1.2.7.RELEASE) and the 
> camel-spring-boot plugin (2.16.0).
>
> Here are the important parts of the code:
>
> @Component
> public class MyRoute extends SpringRouteBuilder {
>     @Override
>     public void configure() throws Exception {
>         from(direct:responseQueue)
>                 .transacted()
> .split(...)
> .to(activemq:individual_persist_queue)
> .end()
>                 .to("spring-ws:http://localhost:8088/acknowledge_webservice";)
>                 .log("DONE");
>     }
> }
>
> Now I want to test this route by mocking the activemq and spring-ws endpoints 
> so the test can be run without any dependency on the broker or the webserver.
> My basic requirement is to verify that the right amount of messages are sent 
> to each endpoint.
>
> In my current scenario, the original message is split into three parts which 
> should be sent to ActiveMQ, followed by a single acknowledge message to the 
> WebService.
> The transaction is there to roll-back the JMS deliveries in case the 
> web-service call fails. None of that should be important for this test 
> however.
>
> My test looks as follows:
>
> @RunWith(CamelSpringJUnit4ClassRunner.class)
> @BootstrapWith(CamelTestContextBootstrapper.class)
> @SpringApplicationConfiguration(classes = MyConfig.class)
> @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
> @MockEndpointsAndSkip
> public class CamelSpringBootTest {
>
>     @Produce(uri = "direct:responseQueue ")
>     protected ProducerTemplate template;
>
>     @EndpointInject(uri = "mock: 
> spring-ws:http://localhost:8088/acknowledge_webservice";)
>     MockEndpoint webserviceMock;
>
>     @EndpointInject(uri = "mock:activemq:individual_persist_queue ")
>     MockEndpoint activemqMock;
>
>
>     @Test
>     public void test() throws Exception {
>         activemqMock.expectedMessageCount(3);
>         webserviceMock.expectedMessageCount(1);
>
>         template.sendBody(someXML);
>
>         MockEndpoint.assertIsSatisfied(10L, TimeUnit.SECONDS, toKcxMock);
>     }
> }
>
> When I run the test with the webservice and ActiveMQ available then 
> everything works as expected.
> The assertions fail however as the mock endpoints don't register any messages.
>
> If I disable the ActiveMQ broker, then I get 'Connection refused' exceptions 
> from the ActiveMQ component.
> As far as I understand Camel shouldn't have tried to send the messages to 
> ActiveMQ though because of the @MockEndpointsAndSkip annotation.
>
> What am I missing?
>
> Thanks for any suggestion,
> Kai
>
> IMPORTANT NOTICE: This email is intended solely for the use of the individual 
> to whom it is addressed and may contain information that is privileged, 
> confidential or otherwise exempt from disclosure under applicable law. If the 
> reader of this email is not the intended recipient or the employee or agent 
> responsible for delivering the message to the intended recipient, you are 
> hereby notified that any dissemination, distribution, or copying of this 
> communication is strictly prohibited. If you have received this communication 
> in error, please immediately return the original message to the sender at the 
> listed email address. In accordance with Kewill policy, emails sent and 
> received may be monitored. Although Kewill takes reasonable precautions to 
> minimize the risk, Kewill accepts no responsibility for any loss or damage 
> should this email contain any virus, or similar destructive or mischievous 
> code.



-- 
Kind regards
Joakim Bjørnstad

Reply via email to