You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by Nicolas Filotto <nf...@talend.com> on 2022/02/10 19:03:59 UTC

Support JUnit 5 for Camel CDI

Hi,

I've just created a ticket https://issues.apache.org/jira/browse/CAMEL-17633 and proposed a PR https://github.com/apache/camel/pull/6929, to add the support of Junit 5 for Camel CDI. I reused part of the code for JUnit 4, the main difference is about the way to advice a route.


So far, what I propose, is to rely on a new annotation (I know that it is not consistent with other test components) called "AdviceRoute" to mark class of type "AdviceWithRouteBuilder" and to bring the id of the route to advice.

Here is an example:

@ExtendWith(CamelCdiExtension.class)
public class CamelCdiTest {
    @AdviceRoute("main-route")
    public class ReplaceDirectWithMockBuilder extends AdviceWithRouteBuilder {
        @Override
        public void configure() throws Exception {
            weaveByToUri("direct:out").replace().to("mock:test");
        }
    }
}
In the previous example, the AdviceWithRouteBuilder of type ReplaceDirectWithMockBuilder advises the route whose identifier is main-route.

The JUnit extension will automatically detect those classes, instantiate them and delay the start-up of the Camel context to make sure that the "advice process" works properly. In other words, you don't have to call explicitly the method "AdviceWith.adviceWith" to advice a route and you don't have to start manually the Camel context which I personally find not convenient. The main drawback is the fact that you can only advice a route by id which limits the possibilities.

What do you think of it? Do you have any feedbacks/questions/remarks to share?

Thank you in advance for your answers,
Regards,
Nicolas

As a recipient of an email from Talend, your contact personal data will be on our systems. Please see our privacy notice (updated August 2020) at Talend, Inc. <https://www.talend.com/contacts-privacy-policy/>



Re: Support JUnit 5 for Camel CDI

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi Nicolas

Thanks for sharing. It looks good and pretty similar to the other
extensions we have.

I will take a deeper look at the PR asap.

Regards
JB

On Thu, Feb 10, 2022 at 8:03 PM Nicolas Filotto <nf...@talend.com> wrote:
>
> Hi,
>
> I've just created a ticket https://issues.apache.org/jira/browse/CAMEL-17633 and proposed a PR https://github.com/apache/camel/pull/6929, to add the support of Junit 5 for Camel CDI. I reused part of the code for JUnit 4, the main difference is about the way to advice a route.
>
>
> So far, what I propose, is to rely on a new annotation (I know that it is not consistent with other test components) called "AdviceRoute" to mark class of type "AdviceWithRouteBuilder" and to bring the id of the route to advice.
>
> Here is an example:
>
> @ExtendWith(CamelCdiExtension.class)
> public class CamelCdiTest {
>     @AdviceRoute("main-route")
>     public class ReplaceDirectWithMockBuilder extends AdviceWithRouteBuilder {
>         @Override
>         public void configure() throws Exception {
>             weaveByToUri("direct:out").replace().to("mock:test");
>         }
>     }
> }
> In the previous example, the AdviceWithRouteBuilder of type ReplaceDirectWithMockBuilder advises the route whose identifier is main-route.
>
> The JUnit extension will automatically detect those classes, instantiate them and delay the start-up of the Camel context to make sure that the "advice process" works properly. In other words, you don't have to call explicitly the method "AdviceWith.adviceWith" to advice a route and you don't have to start manually the Camel context which I personally find not convenient. The main drawback is the fact that you can only advice a route by id which limits the possibilities.
>
> What do you think of it? Do you have any feedbacks/questions/remarks to share?
>
> Thank you in advance for your answers,
> Regards,
> Nicolas
>
> As a recipient of an email from Talend, your contact personal data will be on our systems. Please see our privacy notice (updated August 2020) at Talend, Inc. <https://www.talend.com/contacts-privacy-policy/>
>
>

Re: Support JUnit 5 for Camel CDI

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Yes it is good to be able to deprecate and get rid of the last junit
4.x based test module.

On Thu, Feb 10, 2022 at 8:04 PM Nicolas Filotto <nf...@talend.com> wrote:
>
> Hi,
>
> I've just created a ticket https://issues.apache.org/jira/browse/CAMEL-17633 and proposed a PR https://github.com/apache/camel/pull/6929, to add the support of Junit 5 for Camel CDI. I reused part of the code for JUnit 4, the main difference is about the way to advice a route.
>
>
> So far, what I propose, is to rely on a new annotation (I know that it is not consistent with other test components) called "AdviceRoute" to mark class of type "AdviceWithRouteBuilder" and to bring the id of the route to advice.
>
> Here is an example:
>
> @ExtendWith(CamelCdiExtension.class)
> public class CamelCdiTest {
>     @AdviceRoute("main-route")
>     public class ReplaceDirectWithMockBuilder extends AdviceWithRouteBuilder {
>         @Override
>         public void configure() throws Exception {
>             weaveByToUri("direct:out").replace().to("mock:test");
>         }
>     }
> }
> In the previous example, the AdviceWithRouteBuilder of type ReplaceDirectWithMockBuilder advises the route whose identifier is main-route.
>
> The JUnit extension will automatically detect those classes, instantiate them and delay the start-up of the Camel context to make sure that the "advice process" works properly. In other words, you don't have to call explicitly the method "AdviceWith.adviceWith" to advice a route and you don't have to start manually the Camel context which I personally find not convenient. The main drawback is the fact that you can only advice a route by id which limits the possibilities.
>
> What do you think of it? Do you have any feedbacks/questions/remarks to share?
>
> Thank you in advance for your answers,
> Regards,
> Nicolas
>
> As a recipient of an email from Talend, your contact personal data will be on our systems. Please see our privacy notice (updated August 2020) at Talend, Inc. <https://www.talend.com/contacts-privacy-policy/>
>
>


-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2