This is an automated email from the ASF dual-hosted git repository. aldettinger pushed a commit to branch CAMEL-13826 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8c2dc9b8153d5b78635fec12c8b947cf0ee5aa95 Author: aldettinger <aldettin...@gmail.com> AuthorDate: Tue Aug 20 17:33:30 2019 +0200 CAMEL-13826: Merged CamelTestSupport.isCreateCamelContextPerClass() into JUnit 5 Lifecycle.PER_CLASS --- .../src/main/docs/test-junit5.adoc | 3 +++ .../apache/camel/test/junit5/CamelTestSupport.java | 25 ++++++++++++++-------- .../CreateCamelContextPerTestFalseTest.java | 7 ++---- .../CreateCamelContextPerTestTrueTest.java | 5 ----- .../FilterCreateCamelContextPerClassTest.java | 10 ++------- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/components/camel-test-junit5/src/main/docs/test-junit5.adoc b/components/camel-test-junit5/src/main/docs/test-junit5.adoc index 0ae295f..f31ff75 100644 --- a/components/camel-test-junit5/src/main/docs/test-junit5.adoc +++ b/components/camel-test-junit5/src/main/docs/test-junit5.adoc @@ -62,6 +62,9 @@ Projects using `camel-test` would need to use `camel-test-junit5`. For instance, * `TestSupport` static methods should be imported where needed, for instance `import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf` * Usage of the field `CamelTestSupport.log` should be replaced by another logger, for instance `org.slf4j.LoggerFactory.getLogger(MyCamelTest.class);` * Usage of the method `CamelTestSupport.createRegistry` should be replaced by `CamelTestSupport.createCamelRegistry()` +* Overrides of `isCreateCamelContextPerClass()` returning `false` should be removed +* Overrides of `isCreateCamelContextPerClass()` returning `true` should be replaced by `@TestInstance(Lifecycle.PER_CLASS)` + === Typical migration steps linked to JUnit 5 itself Once Camel related steps have been performed, there are still typical JUnit 5 migration steps to remember: diff --git a/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java index 1818a98..083f3fc 100644 --- a/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java +++ b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java @@ -66,8 +66,10 @@ import org.apache.camel.util.TimeUtils; import org.apache.camel.util.URISupport; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.TestInstance.Lifecycle; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterTestExecutionCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; import org.junit.jupiter.api.extension.ExtensionContext; @@ -82,7 +84,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; * with some routes along with a {@link org.apache.camel.ProducerTemplate} for * use in the test case Do <tt>not</tt> use this class for Spring Boot testing. */ -public abstract class CamelTestSupport implements BeforeEachCallback, AfterAllCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback { +public abstract class CamelTestSupport implements BeforeEachCallback, AfterAllCallback, BeforeAllCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback { /** * JVM system property which can be set to true to turn on dumping route @@ -112,6 +114,7 @@ public abstract class CamelTestSupport implements BeforeEachCallback, AfterAllCa private static final ThreadLocal<AtomicInteger> TESTS = new ThreadLocal<>(); private static final ThreadLocal<CamelTestSupport> INSTANCE = new ThreadLocal<>(); private String currentTestName; + private boolean isCreateCamelContextPerClass = false; private CamelRouteCoverageDumper routeCoverageDumper = new CamelRouteCoverageDumper(); // CHECKSTYLE:ON @@ -135,6 +138,11 @@ public abstract class CamelTestSupport implements BeforeEachCallback, AfterAllCa } @Override + public void beforeAll(ExtensionContext context) { + isCreateCamelContextPerClass = context.getTestInstanceLifecycle().filter(lc -> lc.equals(Lifecycle.PER_CLASS)).isPresent(); + } + + @Override public void afterAll(ExtensionContext context) { CamelTestSupport support = INSTANCE.get(); if (support != null && support.isCreateCamelContextPerClass()) { @@ -197,12 +205,11 @@ public abstract class CamelTestSupport implements BeforeEachCallback, AfterAllCa } /** - * Override to control whether {@link CamelContext} should be setup per test - * or per class. + * Tells whether {@link CamelContext} should be setup per test or per class. * <p/> - * By default it will be setup/teardown per test (per test method). If you - * want to re-use {@link CamelContext} between test methods you can override - * this method and return <tt>true</tt> + * By default it will be setup/teardown per test method. This method returns + * <code>true</code> when the camel test class is annotated + * with @TestInstance(TestInstance.Lifecycle.PER_CLASS). * <p/> * <b>Important:</b> Use this with care as the {@link CamelContext} will * carry over state from previous tests, such as endpoints, components etc. @@ -214,8 +221,8 @@ public abstract class CamelTestSupport implements BeforeEachCallback, AfterAllCa * * @return <tt>true</tt> per class, <tt>false</tt> per test. */ - public boolean isCreateCamelContextPerClass() { - return false; + public final boolean isCreateCamelContextPerClass() { + return isCreateCamelContextPerClass; } /** @@ -539,7 +546,7 @@ public abstract class CamelTestSupport implements BeforeEachCallback, AfterAllCa LOG.info("********************************************************************************"); if (isCreateCamelContextPerClass()) { - // will tear down test specially in CamelTearDownRule + // will tear down test specially in afterAll callback } else { LOG.debug("tearDown()"); doStopTemplates(consumer, template, fluentTemplate); diff --git a/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestFalseTest.java b/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestFalseTest.java index 34c8591..149edb9 100644 --- a/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestFalseTest.java +++ b/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestFalseTest.java @@ -27,12 +27,14 @@ import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit5.CamelTestSupport; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +@TestInstance(TestInstance.Lifecycle.PER_METHOD) public class CreateCamelContextPerTestFalseTest extends CamelTestSupport { private static final Logger LOG = LoggerFactory.getLogger(CreateCamelContextPerTestFalseTest.class); @@ -47,11 +49,6 @@ public class CreateCamelContextPerTestFalseTest extends CamelTestSupport { protected ProducerTemplate template; @Override - public boolean isCreateCamelContextPerClass() { - return false; - } - - @Override protected CamelContext createCamelContext() throws Exception { LOG.info("createCamelContext()"); CREATED_CONTEXTS.incrementAndGet(); diff --git a/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestTrueTest.java b/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestTrueTest.java index a234455..222fe62 100644 --- a/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestTrueTest.java +++ b/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/CreateCamelContextPerTestTrueTest.java @@ -52,11 +52,6 @@ public class CreateCamelContextPerTestTrueTest extends CamelTestSupport { protected ProducerTemplate template; @Override - public boolean isCreateCamelContextPerClass() { - return true; - } - - @Override protected CamelContext createCamelContext() throws Exception { LOG.info("createCamelContext()"); CREATED_CONTEXTS.incrementAndGet(); diff --git a/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/FilterCreateCamelContextPerClassTest.java b/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/FilterCreateCamelContextPerClassTest.java index 0f5be29..be38b86 100644 --- a/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/FilterCreateCamelContextPerClassTest.java +++ b/components/camel-test-junit5/src/test/java/org/apache/camel/test/junit5/patterns/FilterCreateCamelContextPerClassTest.java @@ -19,21 +19,15 @@ package org.apache.camel.test.junit5.patterns; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.junit5.CamelTestSupport; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; /** * Tests filtering using Camel Test */ // START SNIPPET: example +@TestInstance(TestInstance.Lifecycle.PER_CLASS) public class FilterCreateCamelContextPerClassTest extends CamelTestSupport { - @Override - public boolean isCreateCamelContextPerClass() { - // we override this method and return true, to tell Camel test-kit that - // it should only create CamelContext once (per class), so we will - // re-use the CamelContext between each test method in this class - return true; - } - @Test public void testSendMatchingMessage() throws Exception { String expectedBody = "<matched/>";