camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Willem Jiang (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (CAMEL-8064) MockEndpointsAndSkip annotation does not resolve property placeholders
Date Fri, 21 Nov 2014 07:12:33 GMT

     [ https://issues.apache.org/jira/browse/CAMEL-8064?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Willem Jiang reassigned CAMEL-8064:
-----------------------------------

    Assignee: Willem Jiang

> MockEndpointsAndSkip annotation does not resolve property placeholders
> ----------------------------------------------------------------------
>
>                 Key: CAMEL-8064
>                 URL: https://issues.apache.org/jira/browse/CAMEL-8064
>             Project: Camel
>          Issue Type: Improvement
>    Affects Versions: 2.13.2
>            Reporter: Gareth Western
>            Assignee: Willem Jiang
>            Priority: Minor
>
> We are using property placeholders in our route configuration in order to switch components
in our unit tests. For example:
> {code}
>         from(MyRouteBuilder.ENTRY_ENDPOINT)
>             .routeId("some.route")
>             .process(doSomething())
>             .to(MyRouteBuilder.EXIT_ENDPOINT);
> {code}
> Where ENTRY_ENDPOINT = "{{entry.endpoint.uri}}"
> and EXIT_ENDPOINT = "{{exit.endpoint.uri}}"
> Then, in production, the Camel context is initialized with a properties file where the
URIs use the "jms" component, while in our unit tests we initialise the context with a 'test'
properties file where the URIs use the "direct" component. For example:
> {code}
> # test.properties
> entry.endpoint.uri = direct:myRouteBuilder.entry
> exit.endpoint.uri = direct:myRouteBuilder.exit
> {code}
> A typical RouteBuilder unit test looks something like this:
> {code}
> @RunWith(CamelSpringJUnit4ClassRunner.class)
> @ContextConfiguration(
>         classes = { MyRouteBuilderTest.TestConfig.class },
>         loader = CamelSpringDelegatingTestContextLoader.class
> )
> @MockEndpointsAndSkip(value =  "direct:myRouteBuilder.exit")
> public class MyRouteBuilderTest {
>     @Produce(uri = MyRouteBuilder.ENTRY_ENDPOINT)
>     private ProducerTemplate myRouteBuilderProducer;
>     @EndpointInject(uri = "mock:" + MyRouteBuilder.EXIT_ENDPOINT)
>     private MockEndpoint mockOutputServiceEndpoint;
>     @Autowired
>     private CamelContext camelContext;
>     @Test
>     public void testSomething() {
>         ....
>     }
>     @Configuration
>     public static class TestConfig extends SingleRouteCamelConfiguration {
>         @Override
>         protected void setupCamelContext(CamelContext camelContext) throws Exception
{
>             super.setupCamelContext(camelContext);
>             PropertiesComponent prop = camelContext.getComponent("properties", PropertiesComponent.class);
>             prop.setLocation("myRouteBuilder.test.properties");
>         }
>         @Override
>         public RouteBuilder route() {
>             return new MyRouteBuilder();
>         }
>     }
> {code}
> The issue we're having is that the @MockEndpointsAndSkip annotation on the test class
does not resolve property placeholders, therefore we have to write the resolved value instead
of the property placeholder value (which is a public static variable in the RouteBuilder implementation)
I.e. we want to use MyRouteBuilder.EXIT_ENDPOINT instead of "direct:myRouteBuilder.exit".
> It would be nicer to avoid having duplicate extra hard-coded Strings if possible, so
that if the endpoint uri value is updated in the property file then all the tests don't also
have to be updated.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message