Migrates all the test cases to Junit 5 (#75)

Migrates all the test cases to Junit 5
diff --git a/core/pom.xml b/core/pom.xml
index d3f603f..eabac1b 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -120,8 +120,13 @@
 
         <!-- Test -->
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -162,7 +167,7 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
-                    <version>${maven-surefire-plugin.version}</version>
+                    <version>${version.maven.surefire.plugin}</version>
                     <configuration>
                         <failIfNoTests>false</failIfNoTests>
                     </configuration>
diff --git a/core/src/test/java/org/apache/camel/kafkaconnector/CamelSinkTaskTest.java b/core/src/test/java/org/apache/camel/kafkaconnector/CamelSinkTaskTest.java
index cecf5f7..81f14f8 100644
--- a/core/src/test/java/org/apache/camel/kafkaconnector/CamelSinkTaskTest.java
+++ b/core/src/test/java/org/apache/camel/kafkaconnector/CamelSinkTaskTest.java
@@ -28,10 +28,10 @@
 import org.apache.kafka.connect.data.Schema;
 import org.apache.kafka.connect.data.SchemaBuilder;
 import org.apache.kafka.connect.sink.SinkRecord;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class CamelSinkTaskTest {
 
diff --git a/core/src/test/java/org/apache/camel/kafkaconnector/CamelSourceTaskTest.java b/core/src/test/java/org/apache/camel/kafkaconnector/CamelSourceTaskTest.java
index b8318db..a52d0a0 100644
--- a/core/src/test/java/org/apache/camel/kafkaconnector/CamelSourceTaskTest.java
+++ b/core/src/test/java/org/apache/camel/kafkaconnector/CamelSourceTaskTest.java
@@ -26,12 +26,12 @@
 import org.apache.kafka.connect.header.Header;
 import org.apache.kafka.connect.header.Headers;
 import org.apache.kafka.connect.source.SourceRecord;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 public class CamelSourceTaskTest {
 
@@ -193,8 +193,8 @@
             }
         } while (poll == null && retries > 0);
 
-        assertTrue("Received messages are: " + poll.size() + ", expected between 1 and 2.", poll.size() >= 1);
-        assertTrue("Received messages are: " + poll.size() + ", expected between 1 and 2.", poll.size() <= 2);
+        assertTrue(poll.size() >= 1, "Received messages are: " + poll.size() + ", expected between 1 and 2.");
+        assertTrue(poll.size() <= 2, "Received messages are: " + poll.size() + ", expected between 1 and 2.");
 
         camelSourceTask.stop();
     }
diff --git a/core/src/test/java/org/apache/camel/kafkaconnector/DataFormatTest.java b/core/src/test/java/org/apache/camel/kafkaconnector/DataFormatTest.java
index a71b407..a578cdc 100644
--- a/core/src/test/java/org/apache/camel/kafkaconnector/DataFormatTest.java
+++ b/core/src/test/java/org/apache/camel/kafkaconnector/DataFormatTest.java
@@ -24,8 +24,10 @@
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.kafkaconnector.utils.CamelMainSupport;
 import org.apache.kafka.connect.errors.ConnectException;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class DataFormatTest {
 
@@ -53,7 +55,8 @@
         camelsinkTask.stop();
     }
 
-    @Test(expected = ConnectException.class)
+
+    @Test
     public void testDataFormatNotFound() {
         Map<String, String> props = new HashMap<>();
         props.put("camel.source.url", "direct://test");
@@ -61,13 +64,17 @@
         props.put("camel.sink.marshal", "missingDataformat");
 
         CamelSinkTask camelsinkTask = new CamelSinkTask();
-        camelsinkTask.start(props);
-        camelsinkTask.stop();
+        assertThrows(ConnectException.class, () -> camelsinkTask.start(props));
+        assertThrows(ConnectException.class, () -> camelsinkTask.stop());
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testBothDataFormatConfiguredError() throws Exception {
-        new CamelMainSupport(new HashMap<>(), "direct://start", "log://test", "syslog", "syslog");
+        Map<String, String> props = new HashMap<>();
+
+
+        assertThrows(UnsupportedOperationException.class, () -> new CamelMainSupport(props, "direct://start",
+                "log://test", "syslog", "syslog"));
     }
 
     @Test
@@ -86,7 +93,7 @@
 
         cms.start();
         HL7DataFormat hl7dfLoaded = dcc.getRegistry().lookupByNameAndType("hl7", HL7DataFormat.class);
-        Assert.assertFalse(hl7dfLoaded.isValidate());
+        assertFalse(hl7dfLoaded.isValidate());
         cms.stop();
     }
 
@@ -103,7 +110,7 @@
 
         cms.start();
         HL7DataFormat hl7dfLoaded = dcc.getRegistry().lookupByNameAndType("hl7", HL7DataFormat.class);
-        Assert.assertFalse(hl7dfLoaded.isValidate());
+        assertFalse(hl7dfLoaded.isValidate());
         cms.stop();
     }
 }
diff --git a/core/src/test/java/org/apache/camel/kafkaconnector/PropertiesOrderTest.java b/core/src/test/java/org/apache/camel/kafkaconnector/PropertiesOrderTest.java
index d2995a3..a7e22a4 100644
--- a/core/src/test/java/org/apache/camel/kafkaconnector/PropertiesOrderTest.java
+++ b/core/src/test/java/org/apache/camel/kafkaconnector/PropertiesOrderTest.java
@@ -20,7 +20,7 @@
 import java.util.Map;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class PropertiesOrderTest {
 
diff --git a/core/src/test/java/org/apache/camel/kafkaconnector/transforms/CamelTypeConverterTransformTest.java b/core/src/test/java/org/apache/camel/kafkaconnector/transforms/CamelTypeConverterTransformTest.java
index 92badd0..92c668b 100644
--- a/core/src/test/java/org/apache/camel/kafkaconnector/transforms/CamelTypeConverterTransformTest.java
+++ b/core/src/test/java/org/apache/camel/kafkaconnector/transforms/CamelTypeConverterTransformTest.java
@@ -26,12 +26,13 @@
 import org.apache.kafka.connect.data.Struct;
 import org.apache.kafka.connect.source.SourceRecord;
 import org.apache.kafka.connect.transforms.Transformation;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class CamelTypeConverterTransformTest {
 
@@ -99,14 +100,14 @@
         assertEquals(Schema.Type.MAP, transformedValueSourceRecord.valueSchema().type());
     }
 
-    @Test(expected = ConfigException.class)
+    @Test
     public void testIfItCanHandleEmptyKeyProps() {
         final Transformation<SourceRecord> transformationKey = new CamelTypeConverterTransform.Key<>();
 
         final Map<String, Object> props = new HashMap<>();
         props.put(CamelTypeConverterTransform.FIELD_TARGET_TYPE_CONFIG, Map.class.getName());
 
-        transformationKey.configure(Collections.emptyMap());
+        assertThrows(ConfigException.class, () -> transformationKey.configure(Collections.emptyMap()));
     }
 
 }
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/camel/kafkaconnector/utils/SchemaHelperTest.java b/core/src/test/java/org/apache/camel/kafkaconnector/utils/SchemaHelperTest.java
index 9dc9b1c..e37feff 100644
--- a/core/src/test/java/org/apache/camel/kafkaconnector/utils/SchemaHelperTest.java
+++ b/core/src/test/java/org/apache/camel/kafkaconnector/utils/SchemaHelperTest.java
@@ -29,9 +29,10 @@
 import org.apache.kafka.connect.data.Schema;
 import org.apache.kafka.connect.data.SchemaBuilder;
 import org.apache.kafka.connect.data.Struct;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 
 public class SchemaHelperTest {
 
diff --git a/parent/pom.xml b/parent/pom.xml
index 531583a..ac60b3c 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -42,7 +42,7 @@
 
         <activemq.version>5.15.11</activemq.version>
         <kafka.version>2.4.0</kafka.version>
-        <junit.version>4.13</junit.version>
+        <junit.version>5.5.2</junit.version>
         <camel.version>3.0.0</camel.version>
         <jackson.version>2.10.2</jackson.version>
         <log4j2.version>2.8.2</log4j2.version>
@@ -58,7 +58,7 @@
         <version.maven.buildhelper>1.12</version.maven.buildhelper>
         <version.maven.bundle>3.5.1</version.maven.bundle>
         <version.maven.jar>3.1.0</version.maven.jar>
-        <version.maven.failsafe>2.22.1</version.maven.failsafe>
+        <version.maven.failsafe>2.22.2</version.maven.failsafe>
         <version.scala.library>2.12.4</version.scala.library>
         <version.testcontainers>1.12.4</version.testcontainers>
         <version.qpid-jms-client>0.40.0</version.qpid-jms-client>
@@ -66,7 +66,7 @@
 
         <version.maven.checkstyle>8.26</version.maven.checkstyle>
         <version.maven.checkstyle.plugin>3.1.0</version.maven.checkstyle.plugin>
-        <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
+        <version.maven.surefire.plugin>3.0.0-M4</version.maven.surefire.plugin>
         <mycila-license-version>3.0</mycila-license-version>
 
         <itest.zookeeper.container.image>strimzi/kafka:0.16.0-rc1-kafka-2.4.0</itest.zookeeper.container.image>
@@ -226,8 +226,20 @@
 
             <!--  Test dependencies -->
             <dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-api</artifactId>
+                <version>${junit.version}</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-engine</artifactId>
+                <version>${junit.version}</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-params</artifactId>
                 <version>${junit.version}</version>
                 <scope>test</scope>
             </dependency>
@@ -269,6 +281,12 @@
             </dependency>
             <dependency>
                 <groupId>org.testcontainers</groupId>
+                <artifactId>junit-jupiter</artifactId>
+                <version>${version.testcontainers}</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.testcontainers</groupId>
                 <artifactId>kafka</artifactId>
                 <version>${version.testcontainers}</version>
                 <scope>test</scope>
diff --git a/tests/pom.xml b/tests/pom.xml
index 66359c1..74e59ef 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -91,9 +91,21 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-http</artifactId>
         </dependency>
+
+        <!-- test scope dependencies -->
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-params</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -137,6 +149,11 @@
             <artifactId>testcontainers</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
+        </dependency>
 
         <dependency>
             <groupId>org.testcontainers</groupId>
@@ -168,7 +185,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
-                <version>${maven-surefire-plugin.version}</version>
+                <version>${version.maven.surefire.plugin}</version>
                 <configuration>
                     <failIfNoTests>false</failIfNoTests>
                 </configuration>
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/AbstractKafkaTest.java b/tests/src/test/java/org/apache/camel/kafkaconnector/AbstractKafkaTest.java
index 1cb5e4e..8770cfa 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/AbstractKafkaTest.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/AbstractKafkaTest.java
@@ -21,14 +21,21 @@
 import org.apache.camel.kafkaconnector.services.kafka.KafkaServiceFactory;
 import org.apache.camel.kafkaconnector.services.kafkaconnect.KafkaConnectRunnerService;
 import org.apache.camel.kafkaconnector.services.kafkaconnect.KafkaConnectService;
-import org.junit.Rule;
+import org.junit.jupiter.api.extension.RegisterExtension;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+@Testcontainers
 public class AbstractKafkaTest {
-    private static final KafkaService KAFKA_SERVICE;
-    private static final KafkaConnectService KAFKA_CONNECT_RUNNER_SERVICE;
+
+    @RegisterExtension
+    public static final KafkaService KAFKA_SERVICE;
+
+    @RegisterExtension
+    public static final KafkaConnectService KAFKA_CONNECT_RUNNER_SERVICE;
 
     static {
         KAFKA_SERVICE = KafkaServiceFactory.createService();
+
         KAFKA_SERVICE.initialize();
 
         KAFKA_CONNECT_RUNNER_SERVICE = new KafkaConnectRunnerService(KAFKA_SERVICE);
@@ -38,13 +45,12 @@
 
     }
 
-    @Rule
+
     public KafkaService getKafkaService() {
         return KAFKA_SERVICE;
     }
 
 
-    @Rule
     public KafkaConnectService getKafkaConnectService() {
         return KAFKA_CONNECT_RUNNER_SERVICE;
     }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/ContainerLocalKafkaService.java b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/ContainerLocalKafkaService.java
index dbc2a9a..77f3283 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/ContainerLocalKafkaService.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/ContainerLocalKafkaService.java
@@ -17,7 +17,6 @@
 
 package org.apache.camel.kafkaconnector.services.kafka;
 
-import org.apache.camel.kafkaconnector.ContainerUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.KafkaContainer;
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaService.java b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaService.java
index e220933..d93555c 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaService.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaService.java
@@ -17,14 +17,13 @@
 
 package org.apache.camel.kafkaconnector.services.kafka;
 
-import org.junit.rules.MethodRule;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.Statement;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
 
 /**
  * Provides an interface for any type of Kafka service: remote instances, local container, etc
  */
-public interface KafkaService extends MethodRule {
+public interface KafkaService extends BeforeAllCallback {
 
     /**
      * Gets the addresses of the bootstrap servers in the format host1:port,host2:port,etc
@@ -40,14 +39,7 @@
 
 
     @Override
-    default Statement apply(Statement base, FrameworkMethod frameworkMethod, Object o) {
-        return new Statement() {
-
-            @Override
-            public void evaluate() throws Throwable {
-                    base.evaluate();
-            }
-        };
+    default void beforeAll(ExtensionContext extensionContext) throws Exception {
+        initialize();
     }
-
 }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaServiceFactory.java b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaServiceFactory.java
index 623abcd..ea4bbdb 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaServiceFactory.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/KafkaServiceFactory.java
@@ -24,6 +24,7 @@
     private static final Logger LOG = LoggerFactory.getLogger(KafkaServiceFactory.class);
 
     private KafkaServiceFactory() {
+
     }
 
     public static KafkaService createService() {
@@ -44,4 +45,5 @@
         LOG.error("Invalid Kafka instance must be one of 'local-strimzi-container', 'local-kafka-container' or 'remote");
         throw new UnsupportedOperationException("Invalid Kafka instance type:");
     }
+
 }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/StrimziService.java b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/StrimziService.java
index 67699f0..1d4d438 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/StrimziService.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafka/StrimziService.java
@@ -17,7 +17,6 @@
 
 package org.apache.camel.kafkaconnector.services.kafka;
 
-import org.apache.camel.kafkaconnector.ContainerUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.Network;
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectRunnerService.java b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectRunnerService.java
index b3de487..0563400 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectRunnerService.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectRunnerService.java
@@ -28,9 +28,6 @@
 import org.apache.camel.kafkaconnector.ConnectorPropertyFactory;
 import org.apache.camel.kafkaconnector.services.kafka.KafkaService;
 import org.apache.kafka.connect.runtime.ConnectorConfig;
-import org.jetbrains.annotations.NotNull;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.Statement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,40 +48,6 @@
     }
 
 
-    @Override
-    public Statement apply(Statement base, FrameworkMethod frameworkMethod, Object o) {
-        CountDownLatch latch = new CountDownLatch(1);
-        service.submit(() -> kafkaConnectRunner.run(latch));
-
-        try {
-            if (!latch.await(30, TimeUnit.SECONDS)) {
-                LOG.warn("The Kafka Connect Runner timed out while initializing");
-                throw new RuntimeException("The Kafka Connect Runner timed out while initializing");
-            }
-        } catch (InterruptedException e) {
-            LOG.error("The test was interrupted while executing {}", frameworkMethod.getName());
-        }
-
-        return runStatement(base);
-
-    }
-
-    @NotNull
-    private Statement runStatement(Statement base) {
-        return new Statement() {
-
-            @Override
-            public void evaluate() throws Throwable {
-                try {
-                    base.evaluate();
-                } finally {
-                    kafkaConnectRunner.stop();
-                    service.awaitTermination(5, TimeUnit.SECONDS);
-                }
-            }
-        };
-    }
-
     private void checkInitializationState(KafkaConnectRunner.ConnectorInitState initState) {
         Objects.nonNull(initState);
 
@@ -129,4 +92,27 @@
             fail("The connector did not start within a reasonable time");
         }
     }
+
+    public void stop() {
+        kafkaConnectRunner.stop();
+        try {
+            service.awaitTermination(5, TimeUnit.SECONDS);
+        } catch (InterruptedException e) {
+            LOG.warn("The test was interrupted while executing");
+        }
+    }
+
+    public void start() {
+        CountDownLatch latch = new CountDownLatch(1);
+        service.submit(() -> kafkaConnectRunner.run(latch));
+
+        try {
+            if (!latch.await(30, TimeUnit.SECONDS)) {
+                LOG.warn("The Kafka Connect Runner timed out while initializing");
+                throw new RuntimeException("The Kafka Connect Runner timed out while initializing");
+            }
+        } catch (InterruptedException e) {
+            LOG.error("The test was interrupted while executing");
+        }
+    }
 }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectService.java b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectService.java
index b8e5f50..64c5da3 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectService.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/services/kafkaconnect/KafkaConnectService.java
@@ -20,10 +20,27 @@
 import java.util.concurrent.ExecutionException;
 
 import org.apache.camel.kafkaconnector.ConnectorPropertyFactory;
-import org.junit.rules.MethodRule;
+import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
+import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
 
-public interface KafkaConnectService extends MethodRule {
+public interface KafkaConnectService extends BeforeTestExecutionCallback, AfterTestExecutionCallback {
 
     void initializeConnector(ConnectorPropertyFactory propertyFactory) throws ExecutionException, InterruptedException;
     void initializeConnectorBlocking(ConnectorPropertyFactory propertyFactory) throws ExecutionException, InterruptedException;
+
+    void stop();
+    void start();
+
+    @Override
+    default void afterTestExecution(ExtensionContext extensionContext) throws Exception {
+        stop();
+    }
+
+    @Override
+    default void beforeTestExecution(ExtensionContext extensionContext) throws Exception {
+        start();
+    }
+
+
 }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sns/CamelSinkAWSSNSITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sns/CamelSinkAWSSNSITCase.java
index 330d155..9495d96 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sns/CamelSinkAWSSNSITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sns/CamelSinkAWSSNSITCase.java
@@ -32,21 +32,24 @@
 import org.apache.camel.kafkaconnector.TestCommon;
 import org.apache.camel.kafkaconnector.clients.aws.sqs.AWSSQSClient;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.localstack.LocalStackContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
+@Testcontainers
 public class CamelSinkAWSSNSITCase extends AbstractKafkaTest  {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSinkAWSSNSITCase.class);
     private static final int SNS_PORT = 4575;
 
-    @Rule
+    @Container
     public LocalStackContainer localStackContainer = new LocalStackContainer()
             .withServices(LocalStackContainer.Service.SQS, LocalStackContainer.Service.SNS);
 
@@ -55,7 +58,7 @@
     private volatile int received;
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         final String sqsInstance = localStackContainer
                 .getEndpointConfiguration(LocalStackContainer.Service.SQS)
@@ -100,7 +103,8 @@
     }
 
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(value = 90)
     public void testBasicSendReceive() {
         try {
             final String sqsQueue = awsSqsClient.getQueue(TestCommon.DEFAULT_SQS_QUEUE_FOR_SNS);
@@ -129,8 +133,8 @@
             LOG.debug("Created the consumer ... About to receive messages");
 
             if (latch.await(120, TimeUnit.SECONDS)) {
-                Assert.assertTrue("Didn't process the expected amount of messages: " + received + " != " + expect,
-                        received == expect);
+                assertTrue(received == expect,
+                        "Didn't process the expected amount of messages: " + received + " != " + expect);
             } else {
                 fail("Failed to receive the messages within the specified time");
             }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sqs/CamelSinkAWSSQSITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sqs/CamelSinkAWSSQSITCase.java
index 9a936f7..314690e 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sqs/CamelSinkAWSSQSITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/aws/sqs/CamelSinkAWSSQSITCase.java
@@ -31,21 +31,24 @@
 import org.apache.camel.kafkaconnector.TestCommon;
 import org.apache.camel.kafkaconnector.clients.aws.sqs.AWSSQSClient;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.localstack.LocalStackContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@Testcontainers
 public class CamelSinkAWSSQSITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSinkAWSSQSITCase.class);
     private static final int SQS_PORT = 4576;
 
-    @Rule
+    @Container
     public LocalStackContainer localStackContainer = new LocalStackContainer()
             .withServices(LocalStackContainer.Service.SQS);
 
@@ -54,7 +57,7 @@
     private volatile int received;
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         final String sqsInstance = localStackContainer
                 .getEndpointConfiguration(LocalStackContainer.Service.SQS)
@@ -104,7 +107,8 @@
     }
 
 
-    @Test(timeout = 120000)
+    @Test
+    @Timeout(value = 120)
     public void testBasicSendReceive() {
         try {
             Properties properties = ContainerUtil.setupAWSConfigs(localStackContainer, SQS_PORT);
@@ -125,8 +129,8 @@
 
             LOG.debug("Waiting for the test to complete");
             if (latch.await(110, TimeUnit.SECONDS)) {
-                Assert.assertTrue("Didn't process the expected amount of messages: " + received + " != " + expect,
-                        received == expect);
+                assertTrue(received == expect,
+                        "Didn't process the expected amount of messages: " + received + " != " + expect);
             } else {
                 fail(String.format("Failed to receive the messages within the specified time: received %d of %d",
                         received, expect));
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/cassandra/CamelSinkCassandraITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/cassandra/CamelSinkCassandraITCase.java
index 856016b..cc13820 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/cassandra/CamelSinkCassandraITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/cassandra/CamelSinkCassandraITCase.java
@@ -30,19 +30,21 @@
 import org.apache.camel.kafkaconnector.clients.cassandra.dao.TestDataDao;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.apache.camel.kafkaconnector.services.cassandra.CassandraService;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@Testcontainers
 public class CamelSinkCassandraITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSinkCassandraITCase.class);
 
-    @Rule
+    @Container
     public CassandraService cassandraService = new CassandraService();
 
     private CassandraClient cassandraClient;
@@ -52,7 +54,7 @@
     private final int expect = 10;
     private int received;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         String host = cassandraService.getCassandraHost();
         int port = cassandraService.getCQL3Port();
@@ -111,8 +113,8 @@
 
         TestCommon.waitFor(testDataDao::hasEnoughData, (long) expect);
         testDataDao.getData(this::checkRetrievedData);
-        assertTrue(String.format("Did not receive as much data as expected: %d < %d", received, expect),
-                received >= expect);
+        assertTrue(received >= expect,
+                String.format("Did not receive as much data as expected: %d < %d", received, expect));
 
     }
 }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/elasticsearch/CamelSinkElasticSearchITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/elasticsearch/CamelSinkElasticSearchITCase.java
index 109ba2a..5f1858a 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/elasticsearch/CamelSinkElasticSearchITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/elasticsearch/CamelSinkElasticSearchITCase.java
@@ -29,16 +29,21 @@
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.elasticsearch.ElasticsearchContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
+@Testcontainers
 public class CamelSinkElasticSearchITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelElasticSearchPropertyFactory.class);
     // This is required in order to use the Open Source one by default
@@ -46,7 +51,7 @@
 
     private static final int ELASTIC_SEARCH_PORT = 9200;
 
-    @Rule
+    @Container
     public ElasticsearchContainer elasticsearch = new ElasticsearchContainer(ELASTIC_SEARCH_CONTAINER);
 
     private ElasticSearchClient client;
@@ -55,7 +60,7 @@
     private int received;
     private final String transformKey = "index-test";
 
-    @Before
+    @BeforeEach
     public void setUp() {
         final String elasticSearchInstance = elasticsearch
                 .getHttpHostAddress();
@@ -90,11 +95,11 @@
     private void verifyHit(SearchHit searchHit) {
         String source = searchHit.getSourceAsString();
 
-        Assert.assertTrue(source != null);
-        Assert.assertFalse(source.isEmpty());
+        assertTrue(source != null);
+        assertFalse(source.isEmpty());
 
         // TODO: this is not enough, we need to parse the json and check the key itself
-        Assert.assertTrue(source.contains(transformKey));
+        assertTrue(source.contains(transformKey));
 
         LOG.debug("Search hit: {} ", searchHit.getSourceAsString());
         received++;
@@ -102,7 +107,8 @@
 
 
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testIndexOperation() {
         try {
             final String elasticSearchInstance = elasticsearch
@@ -131,7 +137,8 @@
             SearchHits hits = client.getData();
 
             hits.forEach(this::verifyHit);
-            Assert.assertEquals("Did not receive the same amount of messages sent", expect, received);
+            assertEquals(expect, received, "Did not receive the same amount of messages sent");
+
 
             LOG.debug("Created the consumer ... About to receive messages");
         } catch (Exception e) {
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/file/CamelSinkFileITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/file/CamelSinkFileITCase.java
index b6f74b1..c711938 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/file/CamelSinkFileITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/file/CamelSinkFileITCase.java
@@ -34,14 +34,19 @@
 import org.apache.camel.kafkaconnector.ConnectorPropertyFactory;
 import org.apache.camel.kafkaconnector.TestCommon;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
+
+@Testcontainers
 public class CamelSinkFileITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSinkFileITCase.class);
 
@@ -51,7 +56,7 @@
     private final int expect = 1;
 
 
-    @Before
+    @BeforeEach
     public void setUp() {
         File doneFile = new File(SINK_DIR, FILENAME + ".done");
         if (doneFile.exists()) {
@@ -74,7 +79,8 @@
 
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testBasicSendReceive() {
         try {
             String url = "file://" + SINK_DIR + "?fileName=" + FILENAME + "&doneFileName=${file:name}.done";
@@ -94,7 +100,7 @@
 
             waitForFile(sinkFile, doneFile);
 
-            Assert.assertTrue(String.format("The file %s does not exist", sinkFile.getPath()), sinkFile.exists());
+            assertTrue(sinkFile.exists(), String.format("The file %s does not exist", sinkFile.getPath()));
 
             checkFileContents(sinkFile);
 
@@ -112,12 +118,12 @@
         do {
             line = reader.readLine();
             if (line != null) {
-                Assert.assertEquals(String.format("Unexpected data: %s", line), "test", line);
+                assertEquals("test", line, String.format("Unexpected data: %s", line));
                 i++;
             }
         } while (line != null);
 
-        Assert.assertEquals("Did not receive the same amount of messages that were sent", expect, i);
+        assertEquals(expect, i, "Did not receive the same amount of messages that were sent");
     }
 
     private void waitForFile(File sinkFile, File doneFile) throws IOException, InterruptedException {
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/http/CamelSinkHTTPITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/http/CamelSinkHTTPITCase.java
index 905f91b..afba677 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/http/CamelSinkHTTPITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/http/CamelSinkHTTPITCase.java
@@ -30,15 +30,18 @@
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.apache.http.impl.bootstrap.HttpServer;
 import org.apache.http.impl.bootstrap.ServerBootstrap;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
+@Testcontainers
 public class CamelSinkHTTPITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSinkHTTPITCase.class);
     private static final int HTTP_PORT = 18080;
@@ -49,7 +52,7 @@
 
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() throws IOException {
         validationHandler = new HTTPTestValidationHandler(10);
         localServer = ServerBootstrap.bootstrap()
@@ -60,7 +63,7 @@
         localServer.start();
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         localServer.stop();
     }
@@ -80,7 +83,8 @@
         }
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testBasicSendReceive() {
         try {
             String url = "http://localhost:" + HTTP_PORT + "/ckc";
@@ -103,8 +107,7 @@
                 LOG.debug("Received: {} ", reply);
             }
 
-            Assert.assertEquals("Did not receive the same amount of messages that were sent", replies.size(),
-                    expect);
+            assertEquals(replies.size(), expect, "Did not receive the same amount of messages that were sent");
         } catch (Exception e) {
             LOG.error("HTTP test failed: {}", e.getMessage(), e);
             fail(e.getMessage());
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/jms/CamelSinkJMSITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/jms/CamelSinkJMSITCase.java
index 0a70556..899349c 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/jms/CamelSinkJMSITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/jms/CamelSinkJMSITCase.java
@@ -34,29 +34,32 @@
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.apache.camel.kafkaconnector.services.jms.JMSService;
 import org.apache.camel.kafkaconnector.services.jms.JMSServiceFactory;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
 import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * A simple test case that checks whether the timer produces the expected number of
  * messages
  */
+@Testcontainers
 public class CamelSinkJMSITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSinkJMSITCase.class);
 
-    @Rule
+    @Container
     public JMSService jmsService = JMSServiceFactory.createService();
 
     private int received;
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         LOG.info("JMS service running at {}", jmsService.getDefaultEndpoint());
     }
@@ -82,7 +85,8 @@
         return false;
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testBasicSendReceive() {
         try {
             Properties connectionProperties = JMSClient.getConnectionProperties(jmsService.getDefaultEndpoint());
@@ -109,8 +113,7 @@
             LOG.debug("Created the consumer ... About to receive messages");
 
             if (latch.await(35, TimeUnit.SECONDS)) {
-                Assert.assertEquals("Didn't process the expected amount of messages: " + received + " != " + expect,
-                        received, expect);
+                assertEquals(received, expect, "Didn't process the expected amount of messages: " + received + " != " + expect);
             } else {
                 fail("Failed to receive the messages within the specified time");
             }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/kinesis/CamelSourceAWSKinesisITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/kinesis/CamelSourceAWSKinesisITCase.java
index de3197c..61e5a9b 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/kinesis/CamelSourceAWSKinesisITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/kinesis/CamelSourceAWSKinesisITCase.java
@@ -39,21 +39,24 @@
 import org.apache.camel.kafkaconnector.TestCommon;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.localstack.LocalStackContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
 import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@Testcontainers
 public class CamelSourceAWSKinesisITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSourceAWSKinesisITCase.class);
     private static final int KINESIS_PORT = 4568;
 
-    @Rule
+    @Container
     public LocalStackContainer localStackContainer = new LocalStackContainer()
             .withServices(LocalStackContainer.Service.KINESIS);
 
@@ -63,7 +66,7 @@
     private final int expect = 10;
 
 
-    @Before
+    @BeforeEach
     public void setUp() {
         if (!localStackContainer.isRunning()) {
             LOG.info("Kinesis is not running");
@@ -96,7 +99,8 @@
         return true;
     }
 
-    @Test(timeout = 120000)
+    @Test
+    @Timeout(120)
     public void testBasicSendReceive() throws ExecutionException, InterruptedException {
         Properties properties = ContainerUtil.setupAWSConfigs(localStackContainer, KINESIS_PORT);
 
@@ -113,7 +117,7 @@
         kafkaClient.consume(TestCommon.getDefaultTestTopic(this.getClass()), this::checkRecord);
         LOG.debug("Created the consumer ...");
 
-        Assert.assertTrue("Didn't process the expected amount of messages", received == expect);
+        assertEquals(received, expect, "Didn't process the expected amount of messages");
     }
 
     private void putRecords() {
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/s3/CamelSourceAWSS3ITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/s3/CamelSourceAWSS3ITCase.java
index 211801d..74164b9 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/s3/CamelSourceAWSS3ITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/s3/CamelSourceAWSS3ITCase.java
@@ -31,19 +31,23 @@
 import org.apache.camel.kafkaconnector.TestCommon;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.localstack.LocalStackContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@Testcontainers
 public class CamelSourceAWSS3ITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSourceAWSS3ITCase.class);
     private static final int S3_PORT = 4572;
 
-    @Rule
+    @Container
     public LocalStackContainer localStackContainer = new LocalStackContainer()
             .withServices(LocalStackContainer.Service.S3);
 
@@ -52,7 +56,7 @@
     private volatile int received;
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         final String s3Instance = localStackContainer
                 .getEndpointConfiguration(LocalStackContainer.Service.S3)
@@ -84,7 +88,8 @@
         return true;
     }
 
-    @Test(timeout = 180000)
+    @Test
+    @Timeout(180)
     public void testBasicSendReceive() throws ExecutionException, InterruptedException {
         Properties properties = ContainerUtil.setupAWSConfigs(localStackContainer, S3_PORT);
 
@@ -110,6 +115,6 @@
         kafkaClient.consume(TestCommon.getDefaultTestTopic(this.getClass()), this::checkRecord);
         LOG.debug("Created the consumer ...");
 
-        Assert.assertTrue("Didn't process the expected amount of messages", received == expect);
+        assertEquals(received, expect, "Didn't process the expected amount of messages");
     }
 }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/sqs/CamelSourceAWSSQSITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/sqs/CamelSourceAWSSQSITCase.java
index a764337..9d22cc5 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/sqs/CamelSourceAWSSQSITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/source/aws/sqs/CamelSourceAWSSQSITCase.java
@@ -27,19 +27,23 @@
 import org.apache.camel.kafkaconnector.clients.aws.sqs.AWSSQSClient;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.localstack.LocalStackContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@Testcontainers
 public class CamelSourceAWSSQSITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSourceAWSSQSITCase.class);
     private static final int SQS_PORT = 4576;
 
-    @Rule
+    @Container
     public LocalStackContainer localStackContainer = new LocalStackContainer()
             .withServices(LocalStackContainer.Service.SQS);
 
@@ -48,7 +52,7 @@
     private volatile int received;
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         final String sqsInstance = localStackContainer
                 .getEndpointConfiguration(LocalStackContainer.Service.SQS)
@@ -70,7 +74,8 @@
         return true;
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testBasicSendReceive() throws ExecutionException, InterruptedException {
         Properties properties = ContainerUtil.setupAWSConfigs(localStackContainer, SQS_PORT);
 
@@ -91,6 +96,6 @@
         kafkaClient.consume(TestCommon.getDefaultTestTopic(this.getClass()), this::checkRecord);
         LOG.debug("Created the consumer ...");
 
-        Assert.assertTrue("Didn't process the expected amount of messages", received == expect);
+        assertEquals(received, expect, "Didn't process the expected amount of messages");
     }
 }
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/source/jms/CamelSourceJMSITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/source/jms/CamelSourceJMSITCase.java
index 06bd387..6e76879 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/source/jms/CamelSourceJMSITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/source/jms/CamelSourceJMSITCase.java
@@ -27,29 +27,33 @@
 import org.apache.camel.kafkaconnector.services.jms.JMSService;
 import org.apache.camel.kafkaconnector.services.jms.JMSServiceFactory;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+
 
 /**
  * A simple test case that checks whether the timer produces the expected number of
  * messages
  */
+@Testcontainers
 public class CamelSourceJMSITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSourceJMSITCase.class);
 
-    @Rule
+    @Container
     public JMSService jmsService = JMSServiceFactory.createService();
 
     private int received;
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         LOG.info("JMS service running at {}", jmsService.getDefaultEndpoint());
     }
@@ -65,7 +69,8 @@
         return true;
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testBasicSendReceive() {
         try {
             Properties connectionProperties = JMSClient.getConnectionProperties(jmsService.getDefaultEndpoint());
@@ -88,7 +93,7 @@
             kafkaClient.consume(TestCommon.getDefaultTestTopic(this.getClass()), this::checkRecord);
             LOG.debug("Created the consumer ...");
 
-            Assert.assertEquals("Didn't process the expected amount of messages", received, expect);
+            assertEquals(received, expect, "Didn't process the expected amount of messages");
         } catch (Exception e) {
             LOG.error("JMS test failed: {}", e.getMessage(), e);
             fail(e.getMessage());
@@ -96,7 +101,8 @@
 
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testIntSendReceive() {
         try {
             Properties connectionProperties = JMSClient.getConnectionProperties(jmsService.getDefaultEndpoint());
@@ -120,7 +126,7 @@
             kafkaClient.consume(TestCommon.getDefaultTestTopic(this.getClass()) + "testIntSendReceive", this::checkRecord);
             LOG.debug("Created the consumer ...");
 
-            Assert.assertEquals("Didn't process the expected amount of messages", received, expect);
+            assertEquals(received, expect, "Didn't process the expected amount of messages");
         } catch (Exception e) {
             LOG.error("JMS test failed: {}", e.getMessage(), e);
             fail(e.getMessage());
diff --git a/tests/src/test/java/org/apache/camel/kafkaconnector/source/timer/CamelSourceTimerITCase.java b/tests/src/test/java/org/apache/camel/kafkaconnector/source/timer/CamelSourceTimerITCase.java
index d760c35..da8688f 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/source/timer/CamelSourceTimerITCase.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/source/timer/CamelSourceTimerITCase.java
@@ -23,23 +23,27 @@
 import org.apache.camel.kafkaconnector.TestCommon;
 import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.junit.jupiter.Testcontainers;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * A simple test case that checks whether the timer produces the expected number of
  * messages
  */
+@Testcontainers
 public class CamelSourceTimerITCase extends AbstractKafkaTest {
     private static final Logger LOG = LoggerFactory.getLogger(CamelSourceTimerITCase.class);
 
     private int received;
     private final int expect = 10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
 
     }
@@ -54,7 +58,8 @@
         return true;
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testLaunchConnector() throws ExecutionException, InterruptedException {
         CamelTimerPropertyFactory testProperties = new CamelTimerPropertyFactory(1,
                 TestCommon.getDefaultTestTopic(this.getClass()), expect);
@@ -66,6 +71,6 @@
         kafkaClient.consume(TestCommon.getDefaultTestTopic(this.getClass()), this::checkRecord);
         LOG.debug("Created the consumer ...");
 
-        Assert.assertTrue(received == expect);
+        assertEquals(received, expect);
     }
 }