Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.10.0
-
Patch Available
-
Unknown
Description
While implementing a Camel route in a new project which uses Spring's JavaConfig I ran into some issues with tests I had written.
Originally I implemented the tests using the old XML-based appContext, then once I had everything working I started converting it all to JavaConfig. After some research, I found that to do this I had to use
@ContextConfiguration(
locations = {"blah.EsbConfig", ... },
loader = JavaConfigContextLoader.class
)
Which was fine, except it completely broke the functionality of the @MockEndpoints annotation on my tests. I tried adding a org.apache.camel.impl.InterceptSendToMockEndpointStrategy bean to my JavaConfig context, but that didn't change anything. To fix it I ended up making a new (Smart)ContextLoader called CamelSpringDelegatingTestContextLoader, which extends Spring's DelegatingSmartContextLoader and is based on CamelSpringTestContextLoader. It handles both XML and JavaConfig style Spring configuration, and so far seems to have fixed everything.
You must use CamelSpringJUnit4ClassRunner for this to work, and change @ContextConfiguration's "locations" to "classes" (and specify them as Class instances). See example below.
@RunWith(CamelSpringJUnit4ClassRunner.class) @ContextConfiguration( classes = {TestCamelSpringDelegatingTestContextLoader.TestConfig.class}, loader = CamelSpringDelegatingTestContextLoader.class ) @MockEndpoints public class TestSomethingWithCamel { ... }