I seem to have got it working by changing activemq to a DirectComponent for
the test.. is this considered good practice?
<!-- the Camel route is defined in another XML file -->
<import resource="CamelRoutes.xml"/>
<bean id="activemq"
class="org.apache.camel.component.direct.DirectComponent" />
<!-- bean which enables mocking all endpoints -->
<bean id="mockAllEndpoints"
class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy"/>
On Mon, Mar 28, 2011 at 5:32 PM, Tom Howe <[email protected]> wrote:
> Also - if I change the test xml to
>
> <route>
> <from uri="direct:start"/>
> <to uri="activemq:blah"/>
> </route>
>
> and the test to :
>
> public void testAdvisedMockEndpoints() throws Exception {
> getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello
> World");
> template.sendBody("direct:start", "Hello World");
> assertMockEndpointsSatisfied();
> }
>
> the test hangs.. - and never completes.
>
>
>
>
> On Mon, Mar 28, 2011 at 5:29 PM, Tom Howe <[email protected]> wrote:
>
>> ok, I have copied the test from
>>
>>
>> https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java
>>
>> and got that working by changing from SpringTestSupport to
>> CamelSpringTestSupport.
>>
>> Then I tried to reduce it down to my example and found that when I remove
>> the route that consumes from direct:foo, the test fails with:
>>
>> org.apache.camel.CamelExchangeException: No consumers available on
>> endpoint: Endpoint[direct://foo]. Exchange[Message: Hello World]
>>
>> Why is this? Do you have to have a consumer for every endpoint you wish to
>> mock?
>>
>>
>>
>>
>>
>>
>> On Mon, Mar 28, 2011 at 5:08 PM, Claus Ibsen <[email protected]>wrote:
>>
>>> Use
>>> template.sendBody("direct:start", "blah");
>>>
>>> Instead of
>>> > template.sendBody("mock:direct:start", "blah");
>>>
>>>
>>> And mind that the test your picked is using the new auto mock feature
>>> (mock existing endpoints) from Camel 2.7
>>> http://camel.apache.org/mock.html
>>>
>>>
>>>
>>>
>>> On Mon, Mar 28, 2011 at 5:50 PM, Tom Howe <[email protected]> wrote:
>>> > The spring-testing.html doesnt mention CamelSpringTestSupport. Im not
>>> sure
>>> > where to look in camel test suite.
>>> >
>>> > I tried this..
>>> >
>>> > public class SimpleRouteTest extends CamelSpringTestSupport {
>>> >
>>> > @Override
>>> > protected AbstractXmlApplicationContext createApplicationContext()
>>> {
>>> > return new
>>> ClassPathXmlApplicationContext("/CamelRoutesSimple.xml");
>>> > }
>>> >
>>> > public String isMockEndpoints() {
>>> > return "*";
>>> > }
>>> >
>>> > @Test
>>> > public void testSendMessage() throws Exception {
>>> > getMockEndpoint("mock:direct:end").expectedMessageCount(1);
>>> > template.sendBody("mock:direct:start", "blah");
>>> > assertMockEndpointsSatisfied();
>>> > }
>>> > }
>>> >
>>> > It doesnt work though...
>>> >
>>> > From the log it looks like my route is started but then a fresh camel
>>> > context without route is started for the tests.
>>> >
>>> > 2011-03-28 16:46:22,976 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext - Apache Camel 2.7.0
>>> > (CamelContext: camel-1) is starting
>>> > 2011-03-28 16:46:22,976 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext - JMX enabled. Using
>>> > ManagedManagementStrategy.
>>> > 2011-03-28 16:46:23,533 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext - Route: route1 started and
>>> > consuming from: Endpoint[direct://start]
>>> > 2011-03-28 16:46:23,538 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext - Total 1 routes, of which
>>> 1 is
>>> > started.
>>> > 2011-03-28 16:46:23,539 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext - Apache Camel 2.7.0
>>> > (CamelContext: camel-1) started in 0.562 seconds
>>> > 2011-03-28 16:46:23,542 [main] INFO agentsmith.routes.SimpleRouteTest
>>> -
>>> >
>>> ********************************************************************************
>>> > 2011-03-28 16:46:23,543 [main] INFO agentsmith.routes.SimpleRouteTest
>>> -
>>> > Testing: testSendMessage(agentsmith.routes.SimpleRouteTest)
>>> > 2011-03-28 16:46:23,543 [main] INFO agentsmith.routes.SimpleRouteTest
>>> -
>>> >
>>> ********************************************************************************
>>> > 2011-03-28 16:46:23,547 [main] INFO
>>> > org.apache.camel.impl.InterceptSendToMockEndpointStrategy - Adviced
>>> > endpoint [direct://start] with mock endpoint [mock:direct:start]
>>> > 2011-03-28 16:46:23,557 [main] INFO
>>> > org.apache.camel.impl.InterceptSendToMockEndpointStrategy - Adviced
>>> > endpoint [direct://end] with mock endpoint [mock:direct:end]
>>> > 2011-03-28 16:46:23,558 [main] INFO
>>> > org.apache.camel.impl.InterceptSendToMockEndpointStrategy - Adviced
>>> > endpoint [spring-event://default] with mock endpoint
>>> > [mock:spring-event:default]
>>> > 2011-03-28 16:46:23,577 [main] INFO
>>> > org.apache.camel.component.mock.MockEndpoint - Asserting:
>>> > Endpoint[mock://spring-event:default] is satisfied
>>> > 2011-03-28 16:46:23,577 [main] INFO
>>> > org.apache.camel.component.mock.MockEndpoint - Asserting:
>>> > Endpoint[mock://direct:end] is satisfied
>>> >
>>> > java.lang.AssertionError: mock://direct:end Received message count.
>>> > Expected: <1> but was: <0>
>>> > at
>>> >
>>> org.apache.camel.component.mock.MockEndpoint.fail(MockEndpoint.java:1086)
>>> > ....
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > On Mon, Mar 28, 2011 at 4:37 PM, Claus Ibsen <[email protected]>
>>> wrote:
>>> >>
>>> >> On Mon, Mar 28, 2011 at 5:34 PM, Tom Howe <[email protected]>
>>> wrote:
>>> >> > I've read the testing page but it doesnt give any good eaxmple of
>>> using
>>> >> > spring xml routes
>>> >> >
>>> >>
>>> >> There is more here
>>> >> http://camel.apache.org/spring-testing.html
>>> >>
>>> >>
>>> >> > Can you point me to an example of CamelSpringTestSupport ? I cant
>>> see
>>> >> > any
>>> >> > docs on it's usage?
>>> >> >
>>> >>
>>> >> Just try to extend this class and it forces you to implement a method
>>> >> where you load the Spring XML file.
>>> >> There are many examples in the source code, eg in camel-spring module.
>>> >> https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/
>>> >>
>>> >>
>>> >> Btw the Camel in Action book chapter 6 covers all about testing.
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> > Thanks, Tom
>>> >> >
>>> >> > On Mon, Mar 28, 2011 at 4:27 PM, Claus Ibsen <[email protected]
>>> >
>>> >> > wrote:
>>> >> >
>>> >> >> Hi
>>> >> >>
>>> >> >> Check out this page
>>> >> >> http://camel.apache.org/testing
>>> >> >>
>>> >> >> You can then use any IoC means to inject the mocks, such as
>>> >> >> @EndpointInjected or any of the Spring or the new @Resource from
>>> JDK6
>>> >> >> etc.
>>> >> >>
>>> >> >> Also you can extend CamelSpringTestSupport which allows you to load
>>> a
>>> >> >> Spring XML file.
>>> >> >> Thats often what we do to test Camel as CamelXXTestSupport is easy
>>> to
>>> >> >> get mocks, producer template and whatnot without having to IoC
>>> them.
>>> >> >>
>>> >> >>
>>> >> >> On Mon, Mar 28, 2011 at 5:11 PM, Tom Howe <[email protected]>
>>> wrote:
>>> >> >> > I have a routes defined in CamelRoutes.xml and I would like to
>>> test
>>> >> >> > them
>>> >> >> by
>>> >> >> > using the wrapping technique described at the bottom of
>>> >> >> > http://camel.apache.org/mock.html.
>>> >> >> >
>>> >> >> > My CamelRoutes.xml
>>> >> >> > <route autoStartup="true" xmlns="
>>> >> >> http://camel.apache.org/schema/spring
>>> >> >> > ">
>>> >> >> > <from uri="direct:start"/>
>>> >> >> > <to uri="direct:end"/>
>>> >> >> > </route>
>>> >> >> >
>>> >> >> > So I created CamelRoutesTest.xml containing:
>>> >> >> >
>>> >> >> > <import resource="CamelRoutes.xml"/>
>>> >> >> > <bean id="mockAllEndpoints"
>>> >> >> >
>>> class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy"/>
>>> >> >> >
>>> >> >> > but I am not sure how to create a test that both loads the spring
>>> xml
>>> >> >> > AND
>>> >> >> > provides access to the mock endpoints.
>>> >> >> >
>>> >> >> > If I use..
>>> >> >> >
>>> >> >> > @ContextConfiguration( locations=("/CamelRoutesTest"))
>>> >> >> > public class CamelTest extends AbstractJUnit38SpringContextTests
>>> >> >> >
>>> >> >> > }
>>> >> >> >
>>> >> >> > then I have no idea how to *get* the mock endpoints
>>> >> >> >
>>> >> >> > If I use..
>>> >> >> >
>>> >> >> > public class CamelTest extends CamelTestSupport
>>> >> >> >
>>> >> >> > }
>>> >> >> >
>>> >> >> > then I dont know how to load my camel context..
>>> >> >> >
>>> >> >> >
>>> >> >> > I can't seem to find an example test on the website that uses
>>> >> >> > CamelTestSupport AND loads routes from spring xml.
>>> >> >> >
>>> >> >> > thanks, Tom
>>> >> >> >
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> --
>>> >> >> Claus Ibsen
>>> >> >> -----------------
>>> >> >> FuseSource
>>> >> >> Email: [email protected]
>>> >> >> Web: http://fusesource.com
>>> >> >> Twitter: davsclaus
>>> >> >> Blog: http://davsclaus.blogspot.com/
>>> >> >> Author of Camel in Action: http://www.manning.com/ibsen/
>>> >> >>
>>> >> >
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Claus Ibsen
>>> >> -----------------
>>> >> FuseSource
>>> >> Email: [email protected]
>>> >> Web: http://fusesource.com
>>> >> Twitter: davsclaus
>>> >> Blog: http://davsclaus.blogspot.com/
>>> >> Author of Camel in Action: http://www.manning.com/ibsen/
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> -----------------
>>> FuseSource
>>> Email: [email protected]
>>> Web: http://fusesource.com
>>> Twitter: davsclaus
>>> Blog: http://davsclaus.blogspot.com/
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>>
>>
>>
>