camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Minh Tran <minh.t...@winning.com.au>
Subject Re: spring boot test mocks
Date Mon, 16 Nov 2015 11:32:58 GMT
Hi

I think the workaround has some disadvantages. 
- It makes the routes more difficult to read. It took me a while to decipher what {{target:jms:queue}}
actually meant. You might get away with it if you’re only going to mock a few endpoints
but I generally mock every endpoint in my routes. I would need a placeholder for every single
endpoint which is way too much work.
- The endpoint isn’t actually running whereas @MockEndpoints actually executes the endpoint
and if I wanted to skip it, I simply switch to @MockEndpointAndSkip

Without these features, it makes it very difficult to unit test and IMO is one of the biggest
reasons why Camel rocks. It allows you to test your production routes with zero modification.
I have to say this is a deal breaker and I will probably go back to plain Spring which is
a shame since Spring Boot does have other lovely features. 

I fully appreciate you are putting your own time into this and am very grateful so don’t
get me wrong. I hope this is constructive criticism, I apologise in advance if it isn’t.
I’ll also look at how I can contribute. Thanks again.
 
> On 16 Nov 2015, at 9:16 PM, Henryk Konsek <hekonsek@gmail.com> wrote:
> 
> Hi,
> 
> Yes, @MockEndpoints annotation is not supported at the moment. This is a
> feature that has to be coded and added to our Spring Boot module.
> 
> As a workaround you can define your mocked endpoint like:
> 
>  from("from...").to("{{target:jms:queue}}");
> 
> And then set the target=direct:queue for the tests using the Spring Boot
> @IntegrationTest("target=direct:queue") annotation.
> 
> Also you are more than welcome to contribute @MockEndpoints support. It is
> on my TODO list, but not with high priority.
> 
> Cheers!
> 
> pon., 16.11.2015 o 09:32 użytkownik Joakim Bjørnstad <joakibj@gmail.com>
> napisał:
> 
>> Hello,
>> 
>> Doesn't seem like there is any support for @MockEndpoints and
>> @MockEndpointsAndSkip with Spring Boot and Camel at the moment.
>> 
>> The reason for this is that the CamelSpringTestContextLoader is never
>> loaded. Typically you use:
>> 
>> @RunWith(CamelSpringJUnit4ClassRunner.class)
>> @BootstrapWith(CamelTestContextBootstrapper.class)
>> 
>> Together with @SpringApplicationConfiguration, it goes directly to the
>> SpringApplicationContextLoader and thus Camel test annotations are not
>> loaded.
>> 
>> Please see https://issues.apache.org/jira/browse/CAMEL-7963
>> 
>> On Mon, Nov 16, 2015 at 2:40 AM, Minh Tran <minh.tran@winning.com.au>
>> wrote:
>>> Hi
>>> 
>>> I’m trying to write unit tests in camel 2.16.0 and spring boot.
>>> 
>>> My route looks like
>>> 
>>> from(“direct:start”).to(“direct:end”)
>>> 
>>> My unit test looks like
>>> 
>>> @RunWith(SpringJUnit4ClassRunner.class)
>>> @SpringApplicationConfiguration(classes = Config.class)
>>> @MockEndpoints
>>> public class MyUnitTest {
>>> 
>>>  @Produce(uri=“direct:start”)
>>>  private ProducerTemplate producer;
>>> 
>>>  @EndpointInject(uri=“mock:direct:end”)
>>>  private MockEndpoint end;
>>> 
>>>        @Test
>>>        public void testMock() throws InterruptedException {
>>>                end.expectedBodiesReceived("blah");
>>>                producerTemplate.sendBody("blah");
>>>                end.assertIsSatisfied();
>>>        }
>>> 
>>> }
>>> 
>>> It looks like the direct:end bit is never mocked so the assertion fails.
>> It’s like @MockEndpoints is completely ignored.
>>> 
>>> Is this the correct way to mock existing components when using spring
>> boot? Thanks.
>> 
>> 
>> 
>> --
>> Kind regards
>> Joakim Bjørnstad
>> 
> -- 
> Henryk Konsek
> http://about.me/hekonsek


Mime
View raw message