You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2018/02/08 13:02:27 UTC

[incubator-plc4x] 01/01: Ported the entire project to use JUnit4

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/junit4
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 86da20c173ad291e5f3d5fe4c56f37d7f3c2c538
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Feb 8 14:02:19 2018 +0100

    Ported the entire project to use JUnit4
---
 .../java/org/apache/plc4x/camel/ConstantsTest.java |   8 +-
 .../org/apache/plc4x/camel/PLC4XComponentTest.java |  14 +-
 .../org/apache/plc4x/camel/PLC4XEndpointTest.java  |  25 +-
 .../org/apache/plc4x/camel/PLC4XProducerTest.java  |  20 +-
 integrations/apache-edgent/pom.xml                 |   7 +
 .../plc4x/edgent/PlcConnectionAdapterTest.java     | 157 ++++----
 .../org/apache/plc4x/edgent/PlcFunctionsTest.java  |  11 +-
 plc4j/api/pom.xml                                  |   6 +
 .../PlcUsernamePasswordAuthenticationTest.java     |  17 +-
 .../plc4x/java/api/connection/PlcReaderTest.java   |   7 +-
 .../plc4x/java/api/connection/PlcWriterTest.java   |   7 +-
 .../plc4x/java/api/messages/APIMessageTests.java   | 193 +++++-----
 .../java/api/messages/PlcReadRequestTest.java      |  32 +-
 .../java/api/messages/PlcReadResponseTest.java     |   8 +-
 .../plc4x/java/api/messages/PlcRequestTest.java    |  44 +--
 .../plc4x/java/api/messages/PlcResponseTest.java   |  50 +--
 .../java/api/messages/PlcWriteRequestTest.java     |  32 +-
 .../java/api/messages/PlcWriteResponseTest.java    |   8 +-
 .../specific/TypeSafePlcReadRequestTest.java       |  32 +-
 .../specific/TypeSafePlcReadResponseTest.java      |  26 +-
 .../specific/TypeSafePlcWriteRequestTest.java      |  30 +-
 .../specific/TypeSafePlcWriteResponseTest.java     |  20 +-
 plc4j/core/pom.xml                                 |   7 +
 .../apache/plc4x/java/PlcDriverManagerTest.java    |  27 +-
 plc4j/protocols/s7/pom.xml                         |   7 +
 .../java/isoontcp/netty/IsoOnTcpProtocolTest.java  |  37 +-
 .../plc4x/java/isotp/netty/IsoTPProtocolTest.java  | 405 +++++++++++----------
 .../java/isotp/netty/model/IsoTPMessageTests.java  |  21 +-
 .../isotp/netty/model/params/ParameterTests.java   |  36 +-
 .../netty/model/params/TsapParameterTests.java     |  42 +--
 .../isotp/netty/model/tpdus/IsotpModelTests.java   | 113 +++---
 .../isotp/netty/model/types/IsotpTypeTests.java    | 150 ++++----
 .../plc4x/java/netty/events/S7StateTests.java      |  21 +-
 .../org/apache/plc4x/java/s7/S7PlcDriverTest.java  |  42 ++-
 .../java/s7/connection/S7PlcConnectionTests.java   |  59 +--
 .../apache/plc4x/java/s7/model/S7AddressTests.java |  39 +-
 .../plc4x/java/s7/netty/Plc4XS7ProtocolTest.java   |  83 +++--
 .../apache/plc4x/java/s7/netty/S7ProtocolTest.java |  15 +-
 .../s7/netty/model/messages/S7MessageTests.java    | 103 +++---
 .../s7/netty/model/params/S7ParameterTests.java    |  39 +-
 .../s7/netty/model/payloads/S7PayloadTests.java    |  29 +-
 .../java/s7/netty/model/types/S7TypeTests.java     | 104 +++---
 plc4j/utils/pom.xml                                |   1 +
 plc4j/{api => utils/test-utils}/pom.xml            |  10 +-
 .../java/org/apache/plc4x/test/FastTests.java}     |  21 +-
 pom.xml                                            |  63 +---
 46 files changed, 1107 insertions(+), 1121 deletions(-)

diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/ConstantsTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/ConstantsTest.java
index d4e7d5e..12703b2 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/ConstantsTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/ConstantsTest.java
@@ -18,8 +18,8 @@ under the License.
 */
 package org.apache.plc4x.camel;
 
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
+import org.assertj.core.api.Assertions;
+import org.junit.Test;
 
 import java.lang.reflect.Constructor;
 
@@ -27,7 +27,7 @@ public class ConstantsTest {
 
     @Test
     public void testConstantsNotInstanceable() throws Exception {
-        Assertions.assertThrows(IllegalStateException.class, () -> {
+        Assertions.assertThatThrownBy(() -> {
             try {
                 Constructor<Constants> constructor = Constants.class.getDeclaredConstructor();
                 constructor.setAccessible(true);
@@ -35,6 +35,6 @@ public class ConstantsTest {
             } catch (Exception e) {
                 throw e.getCause();
             }
-        });
+        }).isInstanceOf(IllegalStateException.class);
     }
 }
\ No newline at end of file
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
index c8bf21f..6e14090 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
@@ -22,25 +22,13 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 
 public class PLC4XComponentTest extends CamelTestSupport {
 
-    @BeforeEach
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterEach
-    public void tearDown() throws Exception {
-        super.tearDown();
-    }
-
     @Test
     public void testSimpleRouting() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XEndpointTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XEndpointTest.java
index 29ee2dd..eaa45ff 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XEndpointTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XEndpointTest.java
@@ -19,34 +19,35 @@ under the License.
 package org.apache.plc4x.camel;
 
 import org.apache.camel.Component;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.assertj.core.api.Assertions;
+import org.junit.Before;
+import org.junit.Test;
 
 import static org.mockito.Mockito.mock;
 
-class PLC4XEndpointTest {
+public class PLC4XEndpointTest {
 
     PLC4XEndpoint SUT;
 
-    @BeforeEach
-    void setUp() throws Exception {
+    @Before
+    public void setUp() throws Exception {
         SUT = new PLC4XEndpoint("plc4x:mock:10.10.10.1/1/1", mock(Component.class));
     }
 
     @Test
-    void createProducer() throws Exception {
-        Assertions.assertNotNull(SUT.createProducer());
+    public void createProducer() throws Exception {
+        Assertions.assertThat(SUT.createProducer()).isNotNull();
     }
 
     @Test
-    void createConsumer() throws Exception {
-        Assertions.assertThrows(UnsupportedOperationException.class, () -> SUT.createConsumer(null));
+    public void createConsumer() throws Exception {
+        Assertions.assertThatThrownBy(() -> SUT.createConsumer(null))
+            .isInstanceOf(UnsupportedOperationException.class);
     }
 
     @Test
-    void isSingleton() throws Exception {
-        Assertions.assertTrue(SUT.isSingleton());
+    public void isSingleton() throws Exception {
+        Assertions.assertThat(SUT.isSingleton()).isTrue();
     }
 
 }
\ No newline at end of file
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XProducerTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XProducerTest.java
index 15536b0..4e965f4 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XProducerTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XProducerTest.java
@@ -24,8 +24,8 @@ import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.lang.reflect.Field;
 import java.util.Arrays;
@@ -35,14 +35,14 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.mockito.Mockito.*;
 
-class PLC4XProducerTest {
+public class PLC4XProducerTest {
 
     private PLC4XProducer SUT;
 
     private Exchange testExchange;
 
-    @BeforeEach
-    void setUp() throws Exception {
+    @Before
+    public void setUp() throws Exception {
         PLC4XEndpoint endpointMock = mock(PLC4XEndpoint.class, RETURNS_DEEP_STUBS);
         when(endpointMock.getEndpointUri()).thenReturn("plc4x:mock:10.10.10.1/1/1");
         PlcDriverManager plcDriverManagerMock = mock(PlcDriverManager.class, RETURNS_DEEP_STUBS);
@@ -56,7 +56,7 @@ class PLC4XProducerTest {
     }
 
     @Test
-    void process() throws Exception {
+    public void process() throws Exception {
         when(testExchange.getPattern()).thenReturn(ExchangePattern.InOnly);
         SUT.process(testExchange);
         when(testExchange.getPattern()).thenReturn(ExchangePattern.InOut);
@@ -70,7 +70,7 @@ class PLC4XProducerTest {
     }
 
     @Test
-    void process_Async() throws Exception {
+    public void process_Async() throws Exception {
         SUT.process(testExchange, doneSync -> {
         });
         when(testExchange.getPattern()).thenReturn(ExchangePattern.InOnly);
@@ -85,12 +85,12 @@ class PLC4XProducerTest {
     }
 
     @Test
-    void doStop() throws Exception {
+    public void doStop() throws Exception {
         SUT.doStop();
     }
 
     @Test
-    void doStopOpenRequest() throws Exception {
+    public void doStopOpenRequest() throws Exception {
         Field openRequests = SUT.getClass().getDeclaredField("openRequests");
         openRequests.setAccessible(true);
         AtomicInteger atomicInteger = (AtomicInteger) openRequests.get(SUT);
@@ -99,7 +99,7 @@ class PLC4XProducerTest {
     }
 
     @Test
-    void doStopBadConnection() throws Exception {
+    public void doStopBadConnection() throws Exception {
         Field openRequests = SUT.getClass().getDeclaredField("plcConnection");
         openRequests.setAccessible(true);
         PlcConnection plcConnectionMock = mock(PlcConnection.class);
diff --git a/integrations/apache-edgent/pom.xml b/integrations/apache-edgent/pom.xml
index d6d2341..dd29585 100644
--- a/integrations/apache-edgent/pom.xml
+++ b/integrations/apache-edgent/pom.xml
@@ -59,6 +59,13 @@
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-test-utils</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
index 187d773..37e3ae2 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
@@ -34,9 +34,10 @@ import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.assertj.core.api.Assertions;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.lang.reflect.Array;
 import java.util.Calendar;
@@ -44,25 +45,9 @@ import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
-public class PlcConnectionAdapterTest {
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-    // TODO figure out how to get these run via Eclipse (org.junit.jupiter.api?) and remove this
-    // Ah... Junit 5... needs newer Eclipse (newer than neon 1.a)
-    public static void main(String[] args) throws Exception {
-        PlcConnectionAdapterTest t = new PlcConnectionAdapterTest();
-        t.testCtor1();
-        t.testCtor2();
-        t.testCheckDatatype();
-        t.testNewPlcReadRequest();
-        t.testNewPlcWriteRequest();
-        t.testNewSupplier();
-        t.testNewSupplierNeg();
-        t.testNewConsumer1();
-        t.testNewConsumer1Neg();
-        t.testNewConsumer2();
-        t.testNewConsumer2Neg();
-        System.out.println("SUCCESS");
-    }
+public class PlcConnectionAdapterTest {
 
     protected MockConnection getMockConnection() throws PlcConnectionException {
         return (MockConnection) new PlcDriverManager().getConnection("mock://some-cool-url");
@@ -72,13 +57,13 @@ public class PlcConnectionAdapterTest {
      * Test the PlcConnectionAdapter(PlcConnection) ctor, getConnection() and close()
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testCtor1() throws Exception {
         MockConnection mockConnection = getMockConnection();
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(mockConnection);
-        Assertions.assertSame(mockConnection, adapter.getConnection());
+        Assertions.assertThat(mockConnection).isSameAs(adapter.getConnection());
         // and again... multiple adapter.getConnection() returns the same
-        Assertions.assertSame(mockConnection, adapter.getConnection());
+        Assertions.assertThat(mockConnection).isSameAs(adapter.getConnection());
         adapter.close();
     }
 
@@ -86,20 +71,20 @@ public class PlcConnectionAdapterTest {
      * Test the PlcConnectionAdapter(url) ctor, getConnection() and close()
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testCtor2() throws Exception {
         MockConnection mockConnection = getMockConnection();
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(mockConnection.getUrl());
         MockConnection mockConnection2 = (MockConnection) adapter.getConnection();
-        Assertions.assertNotSame(mockConnection, mockConnection2);
-        Assertions.assertSame(mockConnection.getUrl(), mockConnection2.getUrl());
+        Assertions.assertThat(mockConnection).isNotSameAs(mockConnection2);
+        Assertions.assertThat(mockConnection.getUrl()).isSameAs(mockConnection2.getUrl());
         // and again... multiple adapter.getConnection() returns the same
-        Assertions.assertSame(mockConnection2, adapter.getConnection());
+        Assertions.assertThat(mockConnection2).isSameAs(adapter.getConnection());
         adapter.close();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testCheckDatatype() throws Exception {
         PlcConnectionAdapter.checkDatatype(Boolean.class);
         PlcConnectionAdapter.checkDatatype(Byte.class);
@@ -108,10 +93,12 @@ public class PlcConnectionAdapterTest {
         PlcConnectionAdapter.checkDatatype(Float.class);
         PlcConnectionAdapter.checkDatatype(String.class);
         PlcConnectionAdapter.checkDatatype(Calendar.class);
-        Assertions.assertThrows(IllegalArgumentException.class,
-            () -> PlcConnectionAdapter.checkDatatype(Long.class));
-        Assertions.assertThrows(IllegalArgumentException.class,
-            () -> PlcConnectionAdapter.checkDatatype(Double.class));
+        assertThatThrownBy(() ->
+            PlcConnectionAdapter.checkDatatype(Long.class))
+            .isInstanceOf(IllegalArgumentException.class);
+        assertThatThrownBy(() ->
+            PlcConnectionAdapter.checkDatatype(Double.class))
+            .isInstanceOf(IllegalArgumentException.class);
     }
 
     private <T> void checkRead(MockConnection connection, TypeSafePlcReadRequest<T> request, T value) throws InterruptedException, ExecutionException {
@@ -121,9 +108,9 @@ public class PlcConnectionAdapterTest {
 
         CompletableFuture<TypeSafePlcReadResponse<T>> cf = connection.read(request);
 
-        Assertions.assertTrue(cf.isDone());
+        Assertions.assertThat(cf.isDone()).isTrue();
         TypeSafePlcReadResponse<T> response = cf.get();
-        Assertions.assertEquals(value, response.getResponseItems().get(0).getValues().get(0));
+        Assertions.assertThat(value).isEqualTo(response.getResponseItems().get(0).getValues().get(0));
     }
 
     @SuppressWarnings("unchecked")
@@ -134,9 +121,9 @@ public class PlcConnectionAdapterTest {
 
         CompletableFuture<TypeSafePlcWriteResponse<T>> cf = connection.write(request);
 
-        Assertions.assertTrue(cf.isDone());
+        Assertions.assertThat(cf.isDone()).isTrue();
         PlcWriteResponse response = cf.get();
-        Assertions.assertNotNull(response);
+        Assertions.assertThat(response).isNotNull();
         T writtenData = (T) connection.getDataValue(request.getRequestItems().get(0).getAddress());
         if (writtenData.getClass().isArray()) {
             writtenData = (T) Array.get(writtenData, 0);
@@ -144,7 +131,7 @@ public class PlcConnectionAdapterTest {
         if (List.class.isAssignableFrom(writtenData.getClass())) {
             writtenData = (T) ((List) writtenData).get(0);
         }
-        Assertions.assertEquals(value, writtenData);
+        Assertions.assertThat(value).isEqualTo(writtenData);
     }
 
     /*
@@ -152,7 +139,7 @@ public class PlcConnectionAdapterTest {
      */
     @SuppressWarnings("unchecked")
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewPlcReadRequest() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -163,8 +150,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcReadRequest<Boolean> request = PlcConnectionAdapter.newPlcReadRequest(Boolean.class, address);
             ReadRequestItem<Boolean> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(dataType == Boolean.class, "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(dataType).isEqualTo(Boolean.class);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkRead(connection, request, true);
             checkRead(connection, request, false);
         }
@@ -172,8 +159,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcReadRequest<Byte> request = PlcConnectionAdapter.newPlcReadRequest(Byte.class, address);
             ReadRequestItem<Byte> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(dataType == Byte.class, "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(dataType).isEqualTo(Byte.class);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkRead(connection, request, (byte) 0x13);
             checkRead(connection, request, (byte) 0x23);
         }
@@ -181,8 +168,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcReadRequest<Short> request = PlcConnectionAdapter.newPlcReadRequest(Short.class, address);
             ReadRequestItem<Short> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(dataType == Short.class, "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(dataType).isEqualTo(Short.class);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkRead(connection, request, (short) 13);
             checkRead(connection, request, (short) 23);
         }
@@ -190,8 +177,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcReadRequest<Integer> request = PlcConnectionAdapter.newPlcReadRequest(Integer.class, address);
             ReadRequestItem<Integer> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(dataType == Integer.class, "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(dataType).isEqualTo(Integer.class);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkRead(connection, request, 33);
             checkRead(connection, request, -133);
         }
@@ -199,8 +186,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcReadRequest<Float> request = PlcConnectionAdapter.newPlcReadRequest(Float.class, address);
             ReadRequestItem<Float> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(dataType == Float.class, "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(dataType).isEqualTo(Float.class);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkRead(connection, request, 43.5f);
             checkRead(connection, request, -143.5f);
         }
@@ -208,8 +195,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcReadRequest<String> request = PlcConnectionAdapter.newPlcReadRequest(String.class, address);
             ReadRequestItem<String> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(dataType == String.class, "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(dataType).isEqualTo(String.class);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkRead(connection, request, "ReadySetGo");
             checkRead(connection, request, "OneMoreTime");
         }
@@ -217,8 +204,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcReadRequest<Calendar> request = PlcConnectionAdapter.newPlcReadRequest(Calendar.class, address);
             ReadRequestItem<Calendar> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(dataType == Calendar.class, "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(dataType).isEqualTo(Calendar.class);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkRead(connection, request, Calendar.getInstance());
         }
         adapter.close();
@@ -230,7 +217,7 @@ public class PlcConnectionAdapterTest {
      */
     @SuppressWarnings("unchecked")
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewPlcWriteRequest() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -241,48 +228,48 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcWriteRequest<Boolean> request = PlcConnectionAdapter.newPlcWriteRequest(address, true);
             WriteRequestItem<Boolean> requestItem = request.getCheckedRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(Boolean.class.isAssignableFrom(dataType), "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(Boolean.class).isAssignableFrom(dataType);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkWrite(connection, request, true);
         }
         {
             TypeSafePlcWriteRequest<Byte> request = PlcConnectionAdapter.newPlcWriteRequest(address, (byte) 0x113);
             WriteRequestItem<Byte> requestItem = request.getCheckedRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(Byte.class.isAssignableFrom(dataType), "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(Byte.class).isAssignableFrom(dataType);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkWrite(connection, request, (byte) 0x113);
         }
         {
             TypeSafePlcWriteRequest<Short> request = PlcConnectionAdapter.newPlcWriteRequest(address, (short) 113);
             WriteRequestItem<Short> requestItem = request.getCheckedRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(Short.class.isAssignableFrom(dataType), "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(Short.class).isAssignableFrom(dataType);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkWrite(connection, request, (short) 113);
         }
         {
             TypeSafePlcWriteRequest<Integer> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1033);
             WriteRequestItem<Integer> requestItem = request.getCheckedRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(Integer.class.isAssignableFrom(dataType), "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(Integer.class).isAssignableFrom(dataType);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkWrite(connection, request, 1033);
         }
         {
             TypeSafePlcWriteRequest<Float> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1043.5f);
             WriteRequestItem<Float> requestItem = request.getCheckedRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(Float.class.isAssignableFrom(dataType), "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(Float.class).isAssignableFrom(dataType);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkWrite(connection, request, 1043.5f);
         }
         {
             TypeSafePlcWriteRequest<String> request = PlcConnectionAdapter.newPlcWriteRequest(address, "A written value");
             WriteRequestItem<String> requestItem = request.getCheckedRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(String.class.isAssignableFrom(dataType), "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(String.class).isAssignableFrom(dataType);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkWrite(connection, request, "A written value");
         }
         {
@@ -290,8 +277,8 @@ public class PlcConnectionAdapterTest {
             TypeSafePlcWriteRequest<Calendar> request = PlcConnectionAdapter.newPlcWriteRequest(address, calValue);
             WriteRequestItem<Calendar> requestItem = request.getCheckedRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
-            Assertions.assertTrue(Calendar.class.isAssignableFrom(dataType), "class:" + request.getClass());
-            Assertions.assertSame(address, requestItem.getAddress());
+            Assertions.assertThat(Calendar.class).isAssignableFrom(dataType);
+            Assertions.assertThat(address).isSameAs(requestItem.getAddress());
             checkWrite(connection, request, calValue);
         }
         adapter.close();
@@ -302,7 +289,7 @@ public class PlcConnectionAdapterTest {
      */
     @SuppressWarnings("unchecked")
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewSupplier() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -311,7 +298,7 @@ public class PlcConnectionAdapterTest {
 
         {
             Supplier<Boolean> supplier = adapter.newSupplier(Boolean.class, addressStr);
-            Assertions.assertNotSame(supplier, adapter.newSupplier(Boolean.class, addressStr));
+            Assertions.assertThat(supplier).isNotSameAs(adapter.newSupplier(Boolean.class, addressStr));
             checkSupplier(connection, address, supplier, true, false);
         }
         {
@@ -342,7 +329,7 @@ public class PlcConnectionAdapterTest {
      */
     @SuppressWarnings("unchecked")
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewSupplierNeg() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -369,12 +356,12 @@ public class PlcConnectionAdapterTest {
             T readData = supplier.get();
             // System.out.println("checkSupplier"+(readFailureCountTrigger > 0 ? "NEG" : "")+": value:"+value+" readData:"+readData);
             if (readFailureCountTrigger <= 0)
-                Assertions.assertEquals(value, readData);
+                Assertions.assertThat(value).isEqualTo(readData);
             else {
                 if (++readCount != readFailureCountTrigger)
-                    Assertions.assertEquals(value, readData);
+                    Assertions.assertThat(value).isEqualTo(readData);
                 else
-                    Assertions.assertNull(readData);
+                    Assertions.assertThat(readData).isNull();
             }
         }
     }
@@ -384,7 +371,7 @@ public class PlcConnectionAdapterTest {
      */
     @SuppressWarnings("unchecked")
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewConsumer1() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -394,7 +381,7 @@ public class PlcConnectionAdapterTest {
         Consumer<?> consumer;
 
         consumer = adapter.newConsumer(Boolean.class, addressStr);
-        Assertions.assertNotSame(consumer, adapter.newConsumer(Boolean.class, addressStr));
+        Assertions.assertThat(consumer).isNotSameAs(adapter.newConsumer(Boolean.class, addressStr));
         checkConsumer(connection, address, consumer, true, false);
 
         consumer = adapter.newConsumer(Byte.class, addressStr);
@@ -420,7 +407,7 @@ public class PlcConnectionAdapterTest {
      */
     @SuppressWarnings("unchecked")
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewConsumer1Neg() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -457,12 +444,12 @@ public class PlcConnectionAdapterTest {
             }
             // System.out.println("checkConsumer"+(writeFailureCountTrigger > 0 ? "NEG" : "")+": value:"+value+" writtenData:"+writtenData);
             if (writeFailureCountTrigger <= 0)
-                Assertions.assertEquals(value, writtenData);
+                Assertions.assertThat(value).isEqualTo(writtenData);
             else {
                 if (++writeCount != writeFailureCountTrigger)
-                    Assertions.assertEquals(value, writtenData);
+                    Assertions.assertThat(value).isEqualTo(writtenData);
                 else
-                    Assertions.assertEquals(previousValue, writtenData);
+                    Assertions.assertThat(previousValue).isEqualTo(writtenData);
             }
             previousValue = value;
         }
@@ -472,7 +459,7 @@ public class PlcConnectionAdapterTest {
      * test PlcConnectionAdapter.newConsumer(addressFn, valueFn)
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewConsumer2() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -508,7 +495,7 @@ public class PlcConnectionAdapterTest {
      * test PlcConnectionAdapter.newConsumer(addressFn, valueFn) with write failure
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void testNewConsumer2Neg() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
         MockAddress address = new MockAddress(addressStr);
@@ -558,12 +545,12 @@ public class PlcConnectionAdapterTest {
             }
             // System.out.println("checkConsumerJson"+(writeFailureCountTrigger > 0 ? "NEG" : "")+": value:"+value+" writtenData:"+writtenData);
             if (writeFailureCountTrigger <= 0)
-                Assertions.assertEquals(value, writtenData);
+                Assertions.assertThat(value).isEqualTo(writtenData);
             else {
                 if (++writeCount != writeFailureCountTrigger)
-                    Assertions.assertEquals(value, writtenData);
+                    Assertions.assertThat(value).isEqualTo(writtenData);
                 else
-                    Assertions.assertEquals(previousValue, writtenData);
+                    Assertions.assertThat(previousValue).isEqualTo(writtenData);
             }
             previousValue = value;
         }
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java
index a175fad..e7b0760 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java
@@ -25,8 +25,9 @@ import org.apache.plc4x.edgent.mock.MockAddress;
 import org.apache.plc4x.edgent.mock.MockConnection;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import com.google.gson.JsonObject;
 
@@ -51,7 +52,7 @@ public class PlcFunctionsTest {
    */
   @SuppressWarnings("unchecked")
   @Test
-  @Tag("fast")
+  @Category(FastTests.class)
   public void testSupplier() throws Exception {
     String addressStr = "MyReadWriteAddress/0";
     MockAddress address = new MockAddress(addressStr);
@@ -86,7 +87,7 @@ public class PlcFunctionsTest {
    */
   @SuppressWarnings("unchecked")
   @Test
-  @Tag("fast")
+  @Category(FastTests.class)
   public void testNewConsumer1() throws Exception {
     String addressStr = "MyReadWriteAddress/0";
     MockAddress address = new MockAddress(addressStr);
@@ -120,7 +121,7 @@ public class PlcFunctionsTest {
    * test PlcConnectionAdapter.newConsumer(addressFn, valueFn)
    */
   @Test
-  @Tag("fast")
+  @Category(FastTests.class)
   public void testNewConsumer2() throws Exception {
     String addressStr = "MyReadWriteAddress/0";
     MockAddress address = new MockAddress(addressStr);
diff --git a/plc4j/api/pom.xml b/plc4j/api/pom.xml
index feb7680..dbd5703 100644
--- a/plc4j/api/pom.xml
+++ b/plc4j/api/pom.xml
@@ -33,6 +33,12 @@
   <description>Central API Module.</description>
 
   <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-test-utils</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/authentication/PlcUsernamePasswordAuthenticationTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/authentication/PlcUsernamePasswordAuthenticationTest.java
index fc1c458..1576b73 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/authentication/PlcUsernamePasswordAuthenticationTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/authentication/PlcUsernamePasswordAuthenticationTest.java
@@ -18,20 +18,21 @@ under the License.
 */
 package org.apache.plc4x.java.api.authentication;
 
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import static org.assertj.core.api.Assertions.assertThat;
 
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-class PlcUsernamePasswordAuthenticationTest {
+public class PlcUsernamePasswordAuthenticationTest {
 
     @Test
-    @Tag("fast")
-    void authenication() {
+    @Category(FastTests.class)
+    public void authenication() {
         PlcUsernamePasswordAuthentication authenication = new PlcUsernamePasswordAuthentication("user", "password");
 
-        assertTrue(authenication.getUsername().equals("user"), "Unexpected user name");
-        assertTrue(authenication.getPassword().equals("password"), "Unexpected password");
+        assertThat(authenication.getUsername()).isEqualTo("user").withFailMessage("Unexpected user name");
+        assertThat(authenication.getPassword()).isEqualTo("password").withFailMessage("Unexpected password");
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java
index a2dc905..7ee8660 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java
@@ -21,16 +21,17 @@ package org.apache.plc4x.java.api.connection;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 
 import java.util.Collections;
 import java.util.concurrent.CompletableFuture;
 
 import static org.mockito.Mockito.mock;
 
-class PlcReaderTest {
+public class PlcReaderTest {
+
     @Test
-    void read() throws Exception {
+    public void read() throws Exception {
         ((PlcReader) readRequest -> CompletableFuture.completedFuture(new PlcReadResponse(readRequest, Collections.emptyList())))
             .read(new TypeSafePlcReadRequest<>(String.class, mock(Address.class))).get();
     }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java
index 7c2715f..d60102e 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java
@@ -21,16 +21,17 @@ package org.apache.plc4x.java.api.connection;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 
 import java.util.Collections;
 import java.util.concurrent.CompletableFuture;
 
 import static org.mockito.Mockito.mock;
 
-class PlcWriterTest {
+public class PlcWriterTest {
+
     @Test
-    void write() throws Exception {
+    public void write() throws Exception {
         PlcWriter dummyImplementation = writeRequest -> CompletableFuture.completedFuture(new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) writeRequest, Collections.emptyList()));
         dummyImplementation.write(new TypeSafePlcWriteRequest<>(String.class, mock(Address.class))).get();
     }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
index 7456d4e..0035827 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
@@ -19,6 +19,8 @@ under the License.
 
 package org.apache.plc4x.java.api.messages;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
@@ -27,124 +29,121 @@ import org.apache.plc4x.java.api.messages.mock.MockAddress;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.types.ResponseCode;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 
-import static org.junit.jupiter.api.Assertions.*;
 
-class APIMessageTests {
+public class APIMessageTests {
 
     @Test
-    @Tag("fast")
-    void readRequestItemSize() {
+    @Category(FastTests.class)
+    public void readRequestItemSize() {
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
-        assertTrue(readRequestItem.getAddress().equals(address), "Unexpected address");
-        assertTrue(readRequestItem.getDatatype() == Byte.class, "Unexpected data type");
-        assertTrue(readRequestItem.getSize() == 1, "Unexpected size");
+        assertThat(readRequestItem.getAddress()).isEqualTo(address).withFailMessage("Unexpected address");
+        assertThat(readRequestItem.getDatatype()).isEqualTo(Byte.class).withFailMessage("Unexpected data type");
+        assertThat(readRequestItem.getSize()).isEqualTo(1).withFailMessage("Unexpected size");
     }
 
     @Test
-    @Tag("fast")
-    void readRequestItem() {
+    @Category(FastTests.class)
+    public void readRequestItem() {
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address);
-        assertTrue(readRequestItem.getAddress().equals(address), "Unexpected address");
-        assertTrue(readRequestItem.getDatatype() == Byte.class, "Unexpected data type");
-        assertTrue(readRequestItem.getSize() == 1, "Unexpected size");
+        assertThat(readRequestItem.getAddress()).isEqualTo(address).withFailMessage("Unexpected address");
+        assertThat(readRequestItem.getDatatype()).isEqualTo(Byte.class).withFailMessage("Unexpected data type");
+        assertThat(readRequestItem.getSize()).isEqualTo(1).withFailMessage("Unexpected size");
     }
 
     @Test
-    @Tag("fast")
-    void readResponseItem() {
+    @Category(FastTests.class)
+    public void readResponseItem() {
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
         ReadResponseItem<Byte> readResponseItem = new ReadResponseItem<>(readRequestItem, ResponseCode.OK, Collections.emptyList());
-        assertTrue(readResponseItem.getResponseCode() == ResponseCode.OK, "Unexpected response code");
-        assertTrue(readResponseItem.getValues().isEmpty(), "List should be empty");
-        assertTrue(readResponseItem.getRequestItem().equals(readRequestItem), "Unexpected read request item");
+        assertThat(readResponseItem.getResponseCode()).isEqualTo(ResponseCode.OK).withFailMessage("Unexpected response code");
+        assertThat(readResponseItem.getValues()).isEmpty();
+        assertThat(readResponseItem.getRequestItem()).isEqualTo(readRequestItem).withFailMessage("Unexpected read request item");
     }
 
     @Test
-    @Tag("fast")
-    void writeRequestItem() {
+    @Category(FastTests.class)
+    public void writeRequestItem() {
         MockAddress address = new MockAddress("mock:/DATA");
         WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 0x45);
 
-        assertTrue(writeRequestItem.getAddress().equals(address), "Unexpected address");
-        assertTrue(writeRequestItem.getDatatype() == Byte.class, "Unexpected data type");
-        assertTrue(writeRequestItem.getValues().get(0) == 0x45, "Unexpected value");
+        assertThat(writeRequestItem.getAddress()).isEqualTo(address).withFailMessage("Unexpected address");
+        assertThat(writeRequestItem.getDatatype()).isEqualTo(Byte.class).withFailMessage("Unexpected data type");
+        assertThat(writeRequestItem.getValues().get(0)).isEqualTo((byte) 0x45).withFailMessage("Unexpected value");
     }
 
     @Test
-    @Tag("fast")
-    void writeRequestItems() {
+    @Category(FastTests.class)
+    public void writeRequestItems() {
         MockAddress address = new MockAddress("mock:/DATA");
         Byte data[] = {(byte) 0x23, (byte) 0x84};
         WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, data);
-        assertTrue(writeRequestItem.getAddress().equals(address), "Unexpected address");
-        assertTrue(writeRequestItem.getDatatype() == Byte.class, "Unexpected data type");
-        assertTrue(writeRequestItem.getValues().get(0) == (byte) 0x23, "Unexpected value");
-        assertTrue(writeRequestItem.getValues().get(1) == (byte) 0x84, "Unexpected value");
+        assertThat(writeRequestItem.getAddress()).isEqualTo(address).withFailMessage("Unexpected address");
+        assertThat(writeRequestItem.getDatatype()).isEqualTo(Byte.class).withFailMessage("Unexpected data type");
+        assertThat(writeRequestItem.getValues().get(0)).isEqualTo((byte) 0x23).withFailMessage("Unexpected value");
+        assertThat(writeRequestItem.getValues().get(1)).isEqualTo((byte) 0x84).withFailMessage("Unexpected value");
     }
 
     @Test
-    @Tag("fast")
-    void writeResponseItem() {
+    @Category(FastTests.class)
+    public void writeResponseItem() {
         MockAddress address = new MockAddress("mock:/DATA");
         WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 0x3B);
         WriteResponseItem<Byte> writeResponseItem = new WriteResponseItem<>(writeRequestItem, ResponseCode.OK);
-        assertTrue(writeResponseItem.getResponseCode() == ResponseCode.OK, "Unexpected response code");
-        assertTrue(writeResponseItem.getRequestItem().equals(writeRequestItem), "Unexpected response item");
+        assertThat(writeResponseItem.getResponseCode()).isEqualTo(ResponseCode.OK).withFailMessage("Unexpected response code");
+        assertThat(writeResponseItem.getRequestItem()).isEqualTo(writeRequestItem).withFailMessage("Unexpected response item");
     }
 
     @Test
-    @Tag("fast")
-    void plcReadRequestEmpty() {
+    @Category(FastTests.class)
+    public void plcReadRequestEmpty() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
-        assertTrue(plcReadRequest.getRequestItems().isEmpty(), "Request items not empty");
-        assertTrue(plcReadRequest.getNumberOfItems() == 0, "Expected request items to be zero");
+        assertThat(plcReadRequest.getRequestItems()).isEmpty();
+        assertThat(plcReadRequest.getNumberOfItems()).isEqualTo(0).withFailMessage("Expected request items to be zero");
     }
 
     @Test
-    @Tag("fast")
-    void plcReadRequestAddress() {
+    @Category(FastTests.class)
+    public void plcReadRequestAddress() {
         MockAddress address = new MockAddress("mock:/DATA");
         PlcReadRequest plcReadRequest = new TypeSafePlcReadRequest<>(Byte.class, address);
-        assertTrue(plcReadRequest.getRequestItems().size() == 1, "Expected one request item");
-        assertTrue(plcReadRequest.getNumberOfItems() == 1, "Expected one request item");
+        assertThat(plcReadRequest.getRequestItems()).hasSize(1).withFailMessage("Expected one request item");
+        assertThat(plcReadRequest.getNumberOfItems()).isEqualTo(1).withFailMessage("Expected one request item");
     }
 
     @Test
-    @Tag("fast")
-    void plcReadRequestSize() {
+    @Category(FastTests.class)
+    public void plcReadRequestSize() {
         MockAddress address = new MockAddress("mock:/DATA");
         PlcReadRequest plcReadRequest = PlcReadRequest.builder().addItem(Byte.class, address, (byte) 1).build(Byte.class);
-        assertTrue(plcReadRequest.getRequestItems().size() == 1, "Expected one request item");
-        assertTrue(plcReadRequest.getNumberOfItems() == 1, "Expected one request item");
+        assertThat(plcReadRequest.getRequestItems()).hasSize(1).withFailMessage("Expected one request item");
+        assertThat(plcReadRequest.getNumberOfItems()).isEqualTo(1).withFailMessage("Expected one request item");
     }
 
     @Test
-    @Tag("fast")
-    void plcReadRequestAddItem() {
+    @Category(FastTests.class)
+    public void plcReadRequestAddItem() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
-        assertTrue(plcReadRequest.getRequestItems().isEmpty(), "Request items not empty");
-        assertTrue(plcReadRequest.getNumberOfItems() == 0, "Expected request items to be zero");
+        assertThat(plcReadRequest.getRequestItems()).isEmpty();
+        assertThat(plcReadRequest.getNumberOfItems()).isEqualTo(0).withFailMessage("Expected request items to be zero");
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, (byte) 1);
         plcReadRequest.addItem(readRequestItem);
-        assertTrue(plcReadRequest.getRequestItems().size() == 1, "Expected one request item");
-        assertTrue(plcReadRequest.getNumberOfItems() == 1, "Expected one request item");
+        assertThat(plcReadRequest.getRequestItems()).hasSize(1).withFailMessage("Expected one request item");
+        assertThat(plcReadRequest.getNumberOfItems()).isEqualTo(1).withFailMessage("Expected one request item");
     }
 
     @Test
-    @Tag("fast")
-    void plcReadResponse() {
+    @Category(FastTests.class)
+    public void plcReadResponse() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
         List<ReadResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
@@ -152,47 +151,47 @@ class APIMessageTests {
         ReadResponseItem<Byte> readResponseItem = new ReadResponseItem<>(readRequestItem, ResponseCode.OK, Collections.emptyList());
         responseItems.add(readResponseItem);
         PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
-        assertTrue(plcReadResponse.getRequest().getNumberOfItems() == 0, "Unexpected number of response items");
-        assertTrue(plcReadResponse.getRequest().equals(plcReadRequest), "Unexpected read request");
-        assertTrue(plcReadResponse.getResponseItems().size() == 1, "Unexpected number of response items");
-        assertTrue(plcReadResponse.getResponseItems().containsAll(responseItems), "Unexpected items in response items");
+        assertThat(plcReadResponse.getRequest().getNumberOfItems()).isEqualTo(0).withFailMessage("Unexpected number of response items");
+        assertThat(plcReadResponse.getRequest()).isEqualTo(plcReadRequest).withFailMessage("Unexpected read request");
+        assertThat(plcReadResponse.getResponseItems()).hasSize(1).withFailMessage("Unexpected number of response items");
+        assertThat(plcReadResponse.getResponseItems()).containsAll(responseItems).withFailMessage("Unexpected items in response items");
     }
 
     @Test
-    @Tag("fast")
-    void plcWriteRequestEmpty() {
+    @Category(FastTests.class)
+    public void plcWriteRequestEmpty() {
         PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
-        assertTrue(plcWriteRequest.getRequestItems().isEmpty(), "Request items not empty");
-        assertTrue(plcWriteRequest.getNumberOfItems() == 0, "Expected request items to be zero");
+        assertThat(plcWriteRequest.getRequestItems()).isEmpty();
+        assertThat(plcWriteRequest.getNumberOfItems()).isEqualTo(0).withFailMessage("Expected request items to be zero");
     }
 
     @Test
-    @Tag("fast")
-    void plcWriteRequestObject() {
+    @Category(FastTests.class)
+    public void plcWriteRequestObject() {
         MockAddress address = new MockAddress("mock:/DATA");
         PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, address, (byte) 0x33);
-        assertTrue(plcWriteRequest.getRequestItems().size() == 1, "Expected no request item");
-        assertTrue(plcWriteRequest.getNumberOfItems() == 1, "Expected one request item");
+        assertThat(plcWriteRequest.getRequestItems()).hasSize(1).withFailMessage("Expected no request item");
+        assertThat(plcWriteRequest.getNumberOfItems()).isEqualTo(1).withFailMessage("Expected one request item");
         List values = plcWriteRequest.getRequestItems().get(0).getValues();
-        assertTrue((byte) values.get(0) == (byte) 0x33, "Expected value 0x33");
+        assertThat((byte) values.get(0)).isEqualTo((byte) 0x33).withFailMessage("Expected value 0x33");
     }
 
     @Test
-    @Tag("fast")
-    void plcWriteRequestObjects() {
+    @Category(FastTests.class)
+    public void plcWriteRequestObjects() {
         MockAddress address = new MockAddress("mock:/DATA");
         Byte[] data = {(byte) 0x22, (byte) 0x66};
         PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, address, data);
-        assertTrue(plcWriteRequest.getRequestItems().size() == 1, "Expected one request item");
-        assertTrue(plcWriteRequest.getNumberOfItems() == 1, "Expected one request item");
+        assertThat(plcWriteRequest.getRequestItems()).hasSize(1).withFailMessage("Expected one request item");
+        assertThat(plcWriteRequest.getNumberOfItems()).isEqualTo(1).withFailMessage("Expected one request item");
         List values = plcWriteRequest.getRequestItems().get(0).getValues();
-        assertTrue((Byte) values.get(0) == (byte) 0x22, "Expected value 0x22");
-        assertTrue((Byte) values.get(1) == (byte) 0x66, "Expected value 0x66");
+        assertThat((Byte) values.get(0)).isEqualTo((byte) 0x22).withFailMessage("Expected value 0x22");
+        assertThat((Byte) values.get(1)).isEqualTo((byte) 0x66).withFailMessage("Expected value 0x66");
     }
 
     @Test
-    @Tag("fast")
-    void plcWriteResponse() {
+    @Category(FastTests.class)
+    public void plcWriteResponse() {
         PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
         List<WriteResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
@@ -200,15 +199,15 @@ class APIMessageTests {
         WriteResponseItem<Byte> writeResponseItem = new WriteResponseItem<>(writeRequestItem, ResponseCode.OK);
         responseItems.add(writeResponseItem);
         PlcWriteResponse plcReadResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
-        assertTrue(plcReadResponse.getRequest().getNumberOfItems() == 0, "Unexpected number of response items");
-        assertTrue(plcReadResponse.getRequest().equals(plcWriteRequest), "Unexpected read request");
-        assertTrue(plcReadResponse.getResponseItems().size() == 1, "Unexpected number of response items");
-        assertTrue(plcReadResponse.getResponseItems().containsAll(responseItems), "Unexpected items in response items");
+        assertThat(plcReadResponse.getRequest().getNumberOfItems()).isEqualTo(0).withFailMessage("Unexpected number of response items");
+        assertThat(plcReadResponse.getRequest()).isEqualTo(plcWriteRequest).withFailMessage("Unexpected read request");
+        assertThat(plcReadResponse.getResponseItems()).hasSize(1).withFailMessage("Unexpected number of response items");
+        assertThat(plcReadResponse.getResponseItems()).containsAll(responseItems).withFailMessage("Unexpected items in response items");
     }
 
     @Test
-    @Tag("fast")
-    void bulkPlcWriteResponseGetValue() {
+    @Category(FastTests.class)
+    public void bulkPlcWriteResponseGetValue() {
         PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
         List<WriteResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
@@ -221,25 +220,25 @@ class APIMessageTests {
         PlcWriteResponse plcWriteResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
         Optional<WriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(writeRequestItem1);
         Optional<WriteResponseItem<Byte>> responseValue2 = plcWriteResponse.getValue(writeRequestItem2);
-        assertEquals(Optional.of(writeResponseItem1), responseValue1, "Unexpected items in response items");
-        assertEquals(Optional.of(writeResponseItem2), responseValue2, "Unexpected items in response items");
+        assertThat(responseValue1).isEqualTo(Optional.of(writeResponseItem1)).withFailMessage("Unexpected items in response items");
+        assertThat(responseValue2).isEqualTo(Optional.of(writeResponseItem2)).withFailMessage("Unexpected items in response items");
     }
 
     @Test
-    @Tag("fast")
-    void nonExistingItemPlcWriteResponseGetValue() {
+    @Category(FastTests.class)
+    public void nonExistingItemPlcWriteResponseGetValue() {
         PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
         List<WriteResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         WriteRequestItem<Byte> nonExistingWriteRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 1);
         PlcWriteResponse plcWriteResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
         Optional<WriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(nonExistingWriteRequestItem);
-        assertEquals(Optional.empty(), responseValue1, "Unexpected items in response items");
+        assertThat(responseValue1).isEqualTo(Optional.empty()).withFailMessage("Unexpected items in response items");
     }
 
     @Test
-    @Tag("fast")
-    void bulkPlcReadResponseGetValue() {
+    @Category(FastTests.class)
+    public void bulkPlcReadResponseGetValue() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
         List<ReadResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
@@ -252,20 +251,20 @@ class APIMessageTests {
         PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
         Optional<ReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(readRequestItem1);
         Optional<ReadResponseItem<Byte>> responseValue2 = plcReadResponse.getValue(readRequestItem2);
-        assertEquals(Optional.of(readResponseItem1), responseValue1, "Unexpected items in response items");
-        assertEquals(Optional.of(readResponseItem2), responseValue2, "Unexpected items in response items");
+        assertThat(responseValue1).isEqualTo(Optional.of(readResponseItem1)).withFailMessage("Unexpected items in response items");
+        assertThat(responseValue2).isEqualTo(Optional.of(readResponseItem2)).withFailMessage("Unexpected items in response items");
     }
 
     @Test
-    @Tag("fast")
-    void nonExistingItemPlcReadResponseGetValue() {
+    @Category(FastTests.class)
+    public void nonExistingItemPlcReadResponseGetValue() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
         List<ReadResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> nonExistingReadRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
         PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
         Optional<ReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(nonExistingReadRequestItem);
-        assertEquals(Optional.empty(), responseValue1, "Unexpected items in response items");
+        assertThat(responseValue1).isEqualTo(Optional.empty()).withFailMessage("Unexpected items in response items");
     }
 
 }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java
index 9906b76..228df37 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java
@@ -20,25 +20,25 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.Collections;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
-class PlcReadRequestTest {
+public class PlcReadRequestTest {
 
     Address dummyAddress;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         dummyAddress = mock(Address.class);
     }
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         new PlcReadRequest();
         new PlcReadRequest(new ReadRequestItem<>(String.class, dummyAddress));
         new PlcReadRequest(String.class, dummyAddress);
@@ -47,9 +47,11 @@ class PlcReadRequestTest {
     }
 
     @Test
-    void builder() {
+    public void builder() {
         { // empty
-            Assertions.assertThrows(IllegalStateException.class, () -> PlcReadRequest.builder().build());
+            assertThatThrownBy(() ->
+                PlcReadRequest.builder().build())
+                .isInstanceOf(IllegalStateException.class);
         }
         { // one item
             PlcReadRequest.builder()
@@ -73,20 +75,20 @@ class PlcReadRequestTest {
                 .build();
         }
         { // two different item typeSafe
-            Assertions.assertThrows(IllegalStateException.class, () -> {
+            assertThatThrownBy(() ->
                 PlcReadRequest.builder()
                     .addItem(String.class, dummyAddress)
                     .addItem(Byte.class, dummyAddress)
-                    .build(String.class);
-            });
+                    .build(String.class))
+                .isInstanceOf(IllegalStateException.class);
         }
         { // two different item typeSafe
-            Assertions.assertThrows(ClassCastException.class, () -> {
+            assertThatThrownBy(() ->
                 PlcReadRequest.builder()
                     .addItem(String.class, dummyAddress)
                     .addItem(Byte.class, dummyAddress)
-                    .build(Byte.class);
-            });
+                    .build(Byte.class))
+                .isInstanceOf(ClassCastException.class);
         }
         { // two equal item typeSafe
             PlcReadRequest.builder()
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java
index 55761df..14eda87 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java
@@ -20,7 +20,7 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 
 import java.util.Collections;
 import java.util.List;
@@ -28,16 +28,16 @@ import java.util.List;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 
-class PlcReadResponseTest {
+public class PlcReadResponseTest {
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         new PlcReadResponse(mock(PlcReadRequest.class), mock(ReadResponseItem.class));
         new PlcReadResponse(mock(PlcReadRequest.class), (List) Collections.singletonList(mock(ReadResponseItem.class)));
     }
 
     @Test
-    void getValue() {
+    public void getValue() {
         new PlcReadResponse(mock(PlcReadRequest.class), (List) Collections.singletonList(mock(ReadResponseItem.class, RETURNS_DEEP_STUBS)))
             .getValue(mock(ReadRequestItem.class));
     }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcRequestTest.java
index a1714b3..59789e9 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcRequestTest.java
@@ -18,69 +18,71 @@
  */
 package org.apache.plc4x.java.api.messages;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.api.messages.items.RequestItem;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
-class PlcRequestTest {
+public class PlcRequestTest {
 
     private List<RequestItem> requestItems;
 
     private PlcRequest SUT;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         requestItems = new ArrayList<>();
         SUT = new PlcRequest<RequestItem>(requestItems) {
         };
     }
 
     @Test
-    void addItem() {
+    public void addItem() {
         SUT.addItem(mock(RequestItem.class));
     }
 
     @Test
-    void getRequestItems() {
-        Assertions.assertEquals(0, SUT.getRequestItems().size());
+    public void getRequestItems() {
+        assertThat(SUT.getRequestItems()).isEmpty();
     }
 
     @Test
-    void getRequestItem() {
-        Assertions.assertEquals(Optional.empty(), SUT.getRequestItem());
+    public void getRequestItem() {
+        assertThat(SUT.getRequestItem()).isEqualTo(Optional.empty());
         requestItems.add(mock(RequestItem.class));
-        Assertions.assertTrue(SUT.getRequestItem().isPresent());
+        assertThat(SUT.getRequestItem().isPresent()).isTrue();
         requestItems.add(mock(RequestItem.class));
-        Assertions.assertThrows(IllegalStateException.class, () -> SUT.getRequestItem());
+        assertThatThrownBy(() -> SUT.getRequestItem()).isInstanceOf(IllegalStateException.class);
     }
 
     @Test
-    void setRequestItem() {
+    public void setRequestItem() {
         SUT.setRequestItem(mock(RequestItem.class));
         requestItems.add(mock(RequestItem.class));
-        Assertions.assertThrows(IllegalStateException.class, () -> SUT.setRequestItem(mock(RequestItem.class)));
+        assertThatThrownBy(() -> SUT.setRequestItem(mock(RequestItem.class))).isInstanceOf(IllegalStateException.class);
     }
 
     @Test
-    void getNumberOfItems() {
-        Assertions.assertEquals(0, SUT.getNumberOfItems());
+    public void getNumberOfItems() {
+        assertThat(SUT.getNumberOfItems()).isEqualTo(0);
     }
 
     @Test
-    void isMultiValue() {
-        Assertions.assertFalse(SUT.isMultiValue());
+    public void isMultiValue() {
+        assertThat(SUT.isMultiValue()).isFalse();
     }
 
     @Test
-    void isEmpty() {
-        Assertions.assertTrue(SUT.isEmpty());
+    public void isEmpty() {
+        assertThat(SUT.isEmpty()).isTrue();
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcResponseTest.java
index 220df87..fe563c5 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcResponseTest.java
@@ -18,70 +18,72 @@
  */
 package org.apache.plc4x.java.api.messages;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.api.messages.items.RequestItem;
 import org.apache.plc4x.java.api.messages.items.ResponseItem;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
-class PlcResponseTest {
+public class PlcResponseTest {
 
     private List<ResponseItem> responseItems;
 
     private PlcResponse SUT;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         responseItems = new ArrayList<>();
         SUT = new PlcResponse<PlcRequest, ResponseItem, RequestItem>(mock(PlcRequest.class), responseItems) {
         };
     }
 
     @Test
-    void getRequest() {
-        Assertions.assertNotNull(SUT.getRequest());
+    public void getRequest() {
+        assertThat(SUT.getRequest()).isNotNull();
     }
 
     @Test
-    void getResponseItems() {
-        Assertions.assertEquals(0, SUT.getResponseItems().size());
+    public void getResponseItems() {
+        assertThat(SUT.getResponseItems()).isEmpty();
     }
 
     @Test
-    void getResponseItem() {
-        Assertions.assertEquals(Optional.empty(), SUT.getResponseItem());
+    public void getResponseItem() {
+        assertThat(SUT.getResponseItem()).isEqualTo(Optional.empty());
         responseItems.add(mock(ResponseItem.class));
-        Assertions.assertTrue(SUT.getResponseItem().isPresent());
+        assertThat(SUT.getResponseItem().isPresent()).isTrue();
         responseItems.add(mock(ResponseItem.class));
-        Assertions.assertThrows(IllegalStateException.class, () -> {
-            SUT.getResponseItem();
-        });
+        assertThatThrownBy(() ->
+            SUT.getResponseItem()).
+            isInstanceOf(IllegalStateException.class);
     }
 
     @Test
-    void getNumberOfItems() {
-        Assertions.assertEquals(0, SUT.getNumberOfItems());
+    public void getNumberOfItems() {
+        assertThat(SUT.getNumberOfItems()).isEqualTo(0);
     }
 
     @Test
-    void isMultiValue() {
-        Assertions.assertFalse(SUT.isMultiValue());
+    public void isMultiValue() {
+        assertThat(SUT.isMultiValue()).isFalse();
     }
 
     @Test
-    void isEmpty() {
-        Assertions.assertTrue(SUT.isEmpty());
+    public void isEmpty() {
+        assertThat(SUT.isEmpty()).isTrue();
     }
 
     @Test
-    void getValue() {
-        Assertions.assertEquals(Optional.empty(), SUT.getValue(null));
+    public void getValue() {
+        assertThat(SUT.getValue(null)).isEqualTo(Optional.empty());
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java
index f3c1f40..c898974 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java
@@ -20,25 +20,25 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.Collections;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
-class PlcWriteRequestTest {
+public class PlcWriteRequestTest {
 
     Address dummyAddress;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         dummyAddress = mock(Address.class);
     }
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         new PlcWriteRequest();
         new PlcWriteRequest(new WriteRequestItem<>(String.class, dummyAddress, ""));
         new PlcWriteRequest(String.class, dummyAddress);
@@ -46,9 +46,11 @@ class PlcWriteRequestTest {
     }
 
     @Test
-    void builder() {
+    public void builder() {
         { // empty
-            Assertions.assertThrows(IllegalStateException.class, () -> PlcWriteRequest.builder().build());
+            assertThatThrownBy(() ->
+                PlcWriteRequest.builder().build())
+                .isInstanceOf(IllegalStateException.class);
         }
         { // one item implicit type
             PlcWriteRequest.builder()
@@ -72,20 +74,20 @@ class PlcWriteRequestTest {
                 .build();
         }
         { // two different item typeSafe
-            Assertions.assertThrows(IllegalStateException.class, () -> {
+            assertThatThrownBy(() ->
                 PlcWriteRequest.builder()
                     .addItem(String.class, dummyAddress)
                     .addItem(Byte.class, dummyAddress)
-                    .build(String.class);
-            });
+                    .build(String.class))
+                .isInstanceOf(IllegalStateException.class);
         }
         { // two different item typeSafe
-            Assertions.assertThrows(ClassCastException.class, () -> {
+            assertThatThrownBy(() ->
                 PlcWriteRequest.builder()
                     .addItem(String.class, dummyAddress)
                     .addItem(Byte.class, dummyAddress)
-                    .build(Byte.class);
-            });
+                    .build(Byte.class))
+                .isInstanceOf(ClassCastException.class);
         }
         { // two equal item typeSafe
             PlcWriteRequest.builder()
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java
index 51e3bf5..ca01800 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java
@@ -20,7 +20,7 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 
 import java.util.Collections;
 import java.util.List;
@@ -28,16 +28,16 @@ import java.util.List;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 
-class PlcWriteResponseTest {
+public class PlcWriteResponseTest {
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         new PlcWriteResponse(mock(PlcWriteRequest.class), mock(WriteResponseItem.class));
         new PlcWriteResponse(mock(PlcWriteRequest.class), (List) Collections.singletonList(mock(WriteResponseItem.class)));
     }
 
     @Test
-    void getValue() {
+    public void getValue() {
         new PlcWriteResponse(mock(PlcWriteRequest.class), (List) Collections.singletonList(mock(WriteResponseItem.class, RETURNS_DEEP_STUBS)))
             .getValue(mock(WriteRequestItem.class));
     }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java
index 6bd5f1f..9b39e7c 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java
@@ -18,29 +18,31 @@
  */
 package org.apache.plc4x.java.api.messages.specific;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.Collections;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-class TypeSafePlcReadRequestTest {
+public class TypeSafePlcReadRequestTest {
 
     ReadRequestItem<String> readRequestItemString;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         readRequestItemString = new ReadRequestItem<>(String.class, mock(Address.class));
     }
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         new TypeSafePlcReadRequest<>(String.class);
         new TypeSafePlcReadRequest<>(String.class, mock(PlcReadRequest.class));
         PlcReadRequest request = mock(PlcReadRequest.class);
@@ -49,29 +51,29 @@ class TypeSafePlcReadRequestTest {
         new TypeSafePlcReadRequest<>(String.class, mock(Address.class));
         new TypeSafePlcReadRequest<>(String.class, mock(Address.class), 3);
         new TypeSafePlcReadRequest<>(String.class, readRequestItemString);
-        Assertions.assertThrows(IllegalArgumentException.class, () -> {
-            new TypeSafePlcReadRequest<>(Byte.class, request);
-        });
+        assertThatThrownBy(() ->
+            new TypeSafePlcReadRequest<>(Byte.class, request))
+            .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
-    void addItem() {
+    public void addItem() {
         new TypeSafePlcReadRequest<>(String.class).addItem(readRequestItemString);
     }
 
     @Test
-    void getCheckedReadRequestItems() {
+    public void getCheckedReadRequestItems() {
         new TypeSafePlcReadRequest<>(String.class).getCheckedReadRequestItems();
     }
 
     @Test
-    void getRequestItem() {
+    public void getRequestItem() {
         new TypeSafePlcReadRequest<>(String.class).getRequestItem();
     }
 
     @Test
-    void getDataType() {
-        Assertions.assertEquals(String.class, new TypeSafePlcReadRequest<>(String.class).getDataType());
+    public void getDataType() {
+        assertThat(new TypeSafePlcReadRequest<>(String.class).getDataType()).isEqualTo(String.class);
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java
index 921703c..c72a59d 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java
@@ -22,39 +22,39 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.types.ResponseCode;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.*;
 
-class TypeSafePlcReadResponseTest {
+public class TypeSafePlcReadResponseTest {
 
     ReadResponseItem<String> readResponseItemString;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         readResponseItemString = new ReadResponseItem<>(mock(ReadRequestItem.class), ResponseCode.OK, Arrays.asList("", ""));
     }
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         TypeSafePlcReadRequest mock = mock(TypeSafePlcReadRequest.class);
         when(mock.getDataType()).thenReturn(String.class);
         new TypeSafePlcReadResponse<>(mock, readResponseItemString);
         new TypeSafePlcReadResponse<>(mock, Collections.singletonList(readResponseItemString));
-        Assertions.assertThrows(IllegalArgumentException.class, () -> {
+        assertThatThrownBy(() -> {
             when(mock.getDataType()).thenReturn(Byte.class);
             new TypeSafePlcReadResponse<>(mock, readResponseItemString);
-        });
+        }).isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
-    void of() {
+    public void of() {
         {
             TypeSafePlcReadResponse.of(mock(PlcReadResponse.class, RETURNS_DEEP_STUBS));
         }
@@ -71,17 +71,17 @@ class TypeSafePlcReadResponseTest {
     }
 
     @Test
-    void getRequest() {
+    public void getRequest() {
         new TypeSafePlcReadResponse<>(mock(TypeSafePlcReadRequest.class), Collections.emptyList()).getRequest();
     }
 
     @Test
-    void getResponseItems() {
+    public void getResponseItems() {
         new TypeSafePlcReadResponse<>(mock(TypeSafePlcReadRequest.class), Collections.emptyList()).getResponseItems();
     }
 
     @Test
-    void getResponseItem() {
+    public void getResponseItem() {
         new TypeSafePlcReadResponse<>(mock(TypeSafePlcReadRequest.class), Collections.emptyList()).getResponseItem();
     }
 
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java
index f6a37cd..759102f 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java
@@ -18,29 +18,31 @@
  */
 package org.apache.plc4x.java.api.messages.specific;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.Collections;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-class TypeSafePlcWriteRequestTest {
+public class TypeSafePlcWriteRequestTest {
 
     WriteRequestItem<String> writeRequestItemString;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         writeRequestItemString = new WriteRequestItem<>(String.class, mock(Address.class));
     }
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         new TypeSafePlcWriteRequest<>(String.class);
         new TypeSafePlcWriteRequest<>(String.class, mock(PlcWriteRequest.class));
         PlcWriteRequest request = mock(PlcWriteRequest.class);
@@ -49,29 +51,27 @@ class TypeSafePlcWriteRequestTest {
         new TypeSafePlcWriteRequest<>(String.class, mock(Address.class));
         new TypeSafePlcWriteRequest<>(String.class, mock(Address.class), "");
         new TypeSafePlcWriteRequest<>(String.class, writeRequestItemString);
-        Assertions.assertThrows(IllegalArgumentException.class, () -> {
-            new TypeSafePlcWriteRequest<>(Byte.class, request);
-        });
+        assertThatThrownBy(() -> new TypeSafePlcWriteRequest<>(Byte.class, request)).isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
-    void addItem() {
+    public void addItem() {
         new TypeSafePlcWriteRequest<>(String.class).addItem(writeRequestItemString);
     }
 
     @Test
-    void getCheckedWriteRequestItems() {
+    public void getCheckedWriteRequestItems() {
         new TypeSafePlcWriteRequest<>(String.class).getCheckedRequestItems();
     }
 
     @Test
-    void getRequestItem() {
+    public void getRequestItem() {
         new TypeSafePlcWriteRequest<>(String.class).getRequestItem();
     }
 
     @Test
-    void getDataType() {
-        Assertions.assertEquals(String.class, new TypeSafePlcWriteRequest<>(String.class).getDataType());
+    public void getDataType() {
+        assertThat(new TypeSafePlcWriteRequest<>(String.class).getDataType()).isEqualTo(String.class);
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java
index 3fe852a..be08ec9 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java
@@ -22,30 +22,30 @@ import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 import org.apache.plc4x.java.api.types.ResponseCode;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.Collections;
 import java.util.List;
 
 import static org.mockito.Mockito.*;
 
-class TypeSafePlcWriteResponseTest {
+public class TypeSafePlcWriteResponseTest {
     WriteResponseItem<String> writeResponseItemString;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         writeResponseItemString = new WriteResponseItem<>(mock(WriteRequestItem.class), ResponseCode.OK);
     }
 
     @Test
-    void constuctor() {
+    public void constuctor() {
         new TypeSafePlcWriteResponse<>(mock(TypeSafePlcWriteRequest.class), writeResponseItemString);
         new TypeSafePlcWriteResponse<>(mock(TypeSafePlcWriteRequest.class), Collections.singletonList(writeResponseItemString));
     }
 
     @Test
-    void of() {
+    public void of() {
         {
             TypeSafePlcWriteResponse.of(mock(PlcWriteResponse.class, RETURNS_DEEP_STUBS));
         }
@@ -62,17 +62,17 @@ class TypeSafePlcWriteResponseTest {
     }
 
     @Test
-    void getRequest() {
+    public void getRequest() {
         new TypeSafePlcWriteResponse<>(mock(TypeSafePlcWriteRequest.class), Collections.emptyList()).getRequest();
     }
 
     @Test
-    void getResponseItems() {
+    public void getResponseItems() {
         new TypeSafePlcWriteResponse<>(mock(TypeSafePlcWriteRequest.class), Collections.emptyList()).getResponseItems();
     }
 
     @Test
-    void getResponseItem() {
+    public void getResponseItem() {
         new TypeSafePlcWriteResponse<>(mock(TypeSafePlcWriteRequest.class), Collections.emptyList()).getResponseItem();
     }
 
diff --git a/plc4j/core/pom.xml b/plc4j/core/pom.xml
index af38c3a..e39c2ad 100644
--- a/plc4j/core/pom.xml
+++ b/plc4j/core/pom.xml
@@ -38,6 +38,13 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.0.1-SNAPSHOT</version>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-test-utils</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java b/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
index 5d4bb36..b2764c4 100644
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
+++ b/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
@@ -22,9 +22,10 @@ import org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthenticatio
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.mock.MockConnection;
+import org.apache.plc4x.test.FastTests;
 import org.assertj.core.api.SoftAssertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.net.MalformedURLException;
@@ -33,14 +34,14 @@ import java.net.URLClassLoader;
 
 import static org.assertj.core.api.Assertions.*;
 
-class PlcDriverManagerTest {
+public class PlcDriverManagerTest {
 
     /**
      * Tries to get the mock plc driver which is part of this testsuite.
      */
     @Test
-    @Tag("fast")
-    void getExistingDriverTest() throws PlcException {
+    @Category(FastTests.class)
+    public void getExistingDriverTest() throws PlcException {
         MockConnection mockConnection = (MockConnection) new PlcDriverManager().getConnection("mock://some-cool-url");
         SoftAssertions softAssertions = new SoftAssertions();
         softAssertions.assertThat(mockConnection.getAuthentication())
@@ -59,8 +60,8 @@ class PlcDriverManagerTest {
      * Tries to get the mock plc driver with authentication which is part of this testsuite.
      */
     @Test
-    @Tag("fast")
-    void getExistingDriverWithAuthenticationTest() throws PlcException {
+    @Category(FastTests.class)
+    public void getExistingDriverWithAuthenticationTest() throws PlcException {
         PlcUsernamePasswordAuthentication authentication =
             new PlcUsernamePasswordAuthentication("user", "pass");
         MockConnection mockConnection = (MockConnection) new PlcDriverManager().getConnection("mock://some-cool-url", authentication);
@@ -85,8 +86,8 @@ class PlcDriverManagerTest {
      * In this test case a driver is requested which is not registered with the {@link PlcDriverManager}.
      */
     @Test
-    @Tag("fast")
-    void getNotExistingDriverTest() throws PlcException {
+    @Category(FastTests.class)
+    public void getNotExistingDriverTest() {
         assertThatThrownBy(() -> new PlcDriverManager().getConnection("non-existing-protocol://some-cool-url"))
             .as("check rejection of invalid protocol")
             .isInstanceOf(PlcConnectionException.class);
@@ -96,8 +97,8 @@ class PlcDriverManagerTest {
      * In this test case a driver is requested which is not registered with the {@link PlcDriverManager}.
      */
     @Test
-    @Tag("fast")
-    void getInvalidUriTest() throws PlcException {
+    @Category(FastTests.class)
+    public void getInvalidUriTest() {
         assertThatThrownBy(() -> new PlcDriverManager().getConnection("The quick brown fox jumps over the lazy dog"))
             .as("check rejection of invalid uri")
             .isInstanceOf(PlcConnectionException.class);
@@ -109,8 +110,8 @@ class PlcDriverManagerTest {
      * an error.
      */
     @Test
-    @Tag("fast")
-    void getDuplicateDriver() throws PlcException, MalformedURLException {
+    @Category(FastTests.class)
+    public void getDuplicateDriver() throws MalformedURLException {
         // Save and replace the context classloader as we need to force the ServiceLoader to
         // use a different service file.
         ClassLoader originalClassloader = Thread.currentThread().getContextClassLoader();
diff --git a/plc4j/protocols/s7/pom.xml b/plc4j/protocols/s7/pom.xml
index f03de0f..3ecdb13 100644
--- a/plc4j/protocols/s7/pom.xml
+++ b/plc4j/protocols/s7/pom.xml
@@ -77,6 +77,13 @@
       <artifactId>commons-io</artifactId>
       <scope>test</scope>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-test-utils</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocolTest.java
index 538e62a..dfeae72 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocolTest.java
@@ -19,7 +19,6 @@ under the License.
 package org.apache.plc4x.java.isoontcp.netty;
 
 import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
 import ch.qos.logback.classic.Level;
@@ -32,15 +31,16 @@ import io.netty.channel.embedded.EmbeddedChannel;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 import org.apache.plc4x.java.isoontcp.netty.model.IsoOnTcpMessage;
 import org.apache.plc4x.java.netty.NettyTestBase;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.LoggerFactory;
 
 
 public class IsoOnTcpProtocolTest extends NettyTestBase {
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encode() {
         IsoOnTcpMessage isoOnTcpMessage = new IsoOnTcpMessage(
             Unpooled.wrappedBuffer(new byte[]{(byte)0x01,(byte)0x02,(byte)0x03}));
@@ -50,18 +50,16 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
         Object obj = channel.readOutbound();
         assertThat(obj).isInstanceOf(ByteBuf.class);
         ByteBuf byteBuf = (ByteBuf) obj;
-        assertEquals(4 + 3, byteBuf.readableBytes(),
-            "The TCP on ISO Header should add 4 bytes to the data sent");
-        assertEquals(IsoOnTcpProtocol.ISO_ON_TCP_MAGIC_NUMBER, byteBuf.getByte(0));
-        assertEquals(4 + 3, byteBuf.getShort(2),
-            "The length value in the packet should reflect the size of the entire data being sent");
+        assertThat(byteBuf.readableBytes()).isEqualTo(4 + 3).withFailMessage("The TCP on ISO Header should add 4 bytes to the data sent");
+        assertThat(byteBuf.getByte(0)).isEqualTo(IsoOnTcpProtocol.ISO_ON_TCP_MAGIC_NUMBER);
+        assertThat(byteBuf.getShort(2)).isEqualTo((short) (4 + 3)).withFailMessage("The length value in the packet should reflect the size of the entire data being sent");
     }
 
     /**
      * Happy path test.
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decode() {
         EmbeddedChannel channel = new EmbeddedChannel(new IsoOnTcpProtocol());
         channel.writeInbound(Unpooled.wrappedBuffer(new byte[]{IsoOnTcpProtocol.ISO_ON_TCP_MAGIC_NUMBER,
@@ -71,8 +69,8 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
         Object obj = channel.readInbound();
         assertThat(obj).isInstanceOf(IsoOnTcpMessage.class);
         IsoOnTcpMessage isoOnTcpMessage = (IsoOnTcpMessage) obj;
-        assertNotNull(isoOnTcpMessage.getUserData());
-        assertEquals(9, isoOnTcpMessage.getUserData().readableBytes());
+        assertThat(isoOnTcpMessage.getUserData()).isNotNull();
+        assertThat(isoOnTcpMessage.getUserData().readableBytes()).isEqualTo(9);
     }
 
     /**
@@ -80,9 +78,10 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
      * an exception should be thrown.
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeWrongMagicByte() {
         EmbeddedChannel channel = new EmbeddedChannel(new IsoOnTcpProtocol());
+        // TODO: Check this is done the same way as in the rest of the project
         Throwable throwable = catchThrowable(() -> channel.writeInbound(Unpooled.wrappedBuffer(new byte[]{0x12,
             (byte)0x00,(byte)0x00,(byte)0x0D,
             (byte)0x01,(byte)0x02,(byte)0x03,(byte)0x04,(byte)0x05,(byte)0x06,(byte)0x07,(byte)0x08,(byte)0x09})));
@@ -95,14 +94,14 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
      * the entire package should be, nothing should be read.
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeWayTooShort() {
         EmbeddedChannel channel = new EmbeddedChannel(new IsoOnTcpProtocol());
         channel.writeInbound(Unpooled.wrappedBuffer(new byte[]{IsoOnTcpProtocol.ISO_ON_TCP_MAGIC_NUMBER,
             (byte)0x00,(byte)0x00,(byte)0x0D}));
         channel.checkException();
         Object obj = channel.readInbound();
-        assertNull(obj, "Nothing should have been decoded");
+        assertThat(obj).isNull();
     }
 
     /**
@@ -110,7 +109,7 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
      * it should be, nothing should be read.
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeTooShort() {
         EmbeddedChannel channel = new EmbeddedChannel(new IsoOnTcpProtocol());
         channel.writeInbound(Unpooled.wrappedBuffer(new byte[]{IsoOnTcpProtocol.ISO_ON_TCP_MAGIC_NUMBER,
@@ -118,7 +117,7 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
             (byte)0x01,(byte)0x02,(byte)0x03,(byte)0x04,(byte)0x05,(byte)0x06,(byte)0x07,(byte)0x08}));
         channel.checkException();
         Object obj = channel.readInbound();
-        assertNull(obj, "Nothing should have been decoded");
+        assertThat(obj).isNull();
     }
 
     /**
@@ -126,7 +125,7 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
      * should be logged
      */
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeLogPacketIfTraceLogging() {
         // Setup the mock logger.
         Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
@@ -146,7 +145,7 @@ public class IsoOnTcpProtocolTest extends NettyTestBase {
                 (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07, (byte) 0x08, (byte) 0x09}));
             channel.checkException();
             Object obj = channel.readInbound();
-            assertNotNull(obj, "Something should have been decoded");
+            assertThat(obj).isNotNull();
 
             // Check that the packet dump was logged.
             verify(mockAppender).doAppend(argThat(argument ->
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
index fea612a..26a6ce9 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.isotp.netty;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
@@ -26,15 +28,15 @@ import org.apache.plc4x.java.isotp.netty.model.IsoTPMessage;
 import org.apache.plc4x.java.isotp.netty.model.params.*;
 import org.apache.plc4x.java.isotp.netty.model.tpdus.*;
 import org.apache.plc4x.java.isotp.netty.model.types.*;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.ArrayList;
 import java.util.Collections;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 
@@ -45,8 +47,8 @@ public class IsoTPProtocolTest {
     private ByteBuf buf;
     private ArrayList<Object> out;
 
-    @BeforeEach
-    void setup() {
+    @Before
+    public void setup() {
         byte rackNo = 1;
         byte slotNo = 4;
         TpduSize tpduSize = TpduSize.SIZE_512;
@@ -57,32 +59,32 @@ public class IsoTPProtocolTest {
         out = new ArrayList<>();
     }
 
-    @AfterEach
-    void terDown() {
+    @After
+    public void terDown() {
         isoTPProtocol = null;
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeConnectionRequest() throws Exception {
         ConnectionRequestTpdu tpdu = new ConnectionRequestTpdu((short) 0x1, (short) (0x2), ProtocolClass.CLASS_0, Collections.emptyList(), buf);
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 7, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x6, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.CONNECTION_REQUEST.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readShort() == (short) 0x2, "Incorrect source reference code");
-        assertTrue(userData.readByte() == ProtocolClass.CLASS_0.getCode(), "Incorrect protocol class");
+        assertThat(userData.writerIndex()).isEqualTo(7);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x6);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.CONNECTION_REQUEST.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readShort()).isEqualTo((short) 0x2);
+        assertThat(userData.readByte()).isEqualTo(ProtocolClass.CLASS_0.getCode());
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeConnectionRequest() throws Exception {
         buf.writeByte(0x6) // header length
             .writeByte(TpduCode.CONNECTION_REQUEST.getCode())
@@ -93,37 +95,37 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ConnectionRequestTpdu requestTpdu = (ConnectionRequestTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(requestTpdu.getTpduCode() == TpduCode.CONNECTION_REQUEST, "Message code not correct");
-        assertTrue(requestTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(requestTpdu.getSourceReference() == (short) 0x2, "Message source reference not correct");
-        assertTrue(requestTpdu.getProtocolClass() == ProtocolClass.CLASS_0, "Message protocol class reference not correct");
-        assertTrue(requestTpdu.getParameters().isEmpty(), "Message contains paramaters");
+        assertThat(requestTpdu.getTpduCode()).isEqualTo(TpduCode.CONNECTION_REQUEST);
+        assertThat(requestTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(requestTpdu.getSourceReference()).isEqualTo((short) 0x2);
+        assertThat(requestTpdu.getProtocolClass()).isEqualTo(ProtocolClass.CLASS_0);
+        assertThat(requestTpdu.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeDisconnectionRequest() throws Exception {
         DisconnectRequestTpdu tpdu = new DisconnectRequestTpdu((short) 0x1, (short) (0x2), DisconnectReason.NORMAL, Collections.emptyList(), buf);
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 7, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x6, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.DISCONNECT_REQUEST.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readShort() == (short) 0x2, "Incorrect source reference code");
-        assertTrue(userData.readByte() == DisconnectReason.NORMAL.getCode(), "Incorrect disconnect reason");
+        assertThat(userData.writerIndex()).isEqualTo(7);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x6);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.DISCONNECT_REQUEST.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readShort()).isEqualTo((short) 0x2);
+        assertThat(userData.readByte()).isEqualTo(DisconnectReason.NORMAL.getCode());
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeDisconnectionRequest() throws Exception {
         buf.writeByte(0x6) // header length
             .writeByte(TpduCode.DISCONNECT_REQUEST.getCode())
@@ -134,36 +136,36 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         DisconnectRequestTpdu requestTpdu = (DisconnectRequestTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(requestTpdu.getTpduCode() == TpduCode.DISCONNECT_REQUEST, "Message code not correct");
-        assertTrue(requestTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(requestTpdu.getSourceReference() == (short) 0x2, "Message source reference not correct");
-        assertTrue(requestTpdu.getDisconnectReason() == DisconnectReason.NORMAL, "Message disconnect reason not correct");
-        assertTrue(requestTpdu.getParameters().isEmpty(), "Message contains paramaters");
+        assertThat(requestTpdu.getTpduCode()).isEqualTo(TpduCode.DISCONNECT_REQUEST);
+        assertThat(requestTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(requestTpdu.getSourceReference()).isEqualTo((short) 0x2);
+        assertThat(requestTpdu.getDisconnectReason()).isEqualTo(DisconnectReason.NORMAL);
+        assertThat(requestTpdu.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeData() throws Exception {
         DataTpdu tpdu = new DataTpdu(true, (byte) 0x7, Collections.emptyList(), buf);
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 3, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x2, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.DATA.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readByte() == (byte) 0x87, "Incorrect Tpdu reference and EOT");
+        assertThat(userData.writerIndex()).isEqualTo(3);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x2);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.DATA.getCode());
+        assertThat(userData.readByte()).isEqualTo((byte) 0x87);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeDataEOT() throws Exception {
         buf.writeByte(0x3) // header length
             .writeByte(TpduCode.DATA.getCode())
@@ -172,18 +174,18 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         DataTpdu requestTpdu = (DataTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(requestTpdu.getTpduCode() == TpduCode.DATA, "Message code not correct");
-        assertTrue(requestTpdu.getTpduRef() == (short) 0x1, "Message Tpdu reference not correct");
-        assertTrue(requestTpdu.isEot(), "Message EOT not correct");
-        assertTrue(requestTpdu.getParameters().isEmpty(), "Message contains paramaters");
+        assertThat(requestTpdu.getTpduCode()).isEqualTo(TpduCode.DATA);
+        assertThat(requestTpdu.getTpduRef()).isEqualTo((byte) 0x1);
+        assertThat(requestTpdu.isEot()).isTrue();
+        assertThat(requestTpdu.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeData() throws Exception {
         buf.writeByte(0x3) // header length
             .writeByte(TpduCode.DATA.getCode())
@@ -192,37 +194,37 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         DataTpdu requestTpdu = (DataTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(requestTpdu.getTpduCode() == TpduCode.DATA, "Message code not correct");
-        assertTrue(requestTpdu.getTpduRef() == (short) 0x1, "Message Tpdu reference not correct");
-        assertTrue(!requestTpdu.isEot(), "Message EOT not correct");
-        assertTrue(requestTpdu.getParameters().isEmpty(), "Message contains paramaters");
+        assertThat(requestTpdu.getTpduCode()).isEqualTo(TpduCode.DATA);
+        assertThat(requestTpdu.getTpduRef()).isEqualTo((byte) 0x1);
+        assertThat(!requestTpdu.isEot()).isTrue();
+        assertThat(requestTpdu.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeConnectionConfirm() throws Exception {
         ConnectionConfirmTpdu tpdu = new ConnectionConfirmTpdu((short) 0x1, (short) (0x2), ProtocolClass.CLASS_1, Collections.emptyList(), buf);
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 7, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x6, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.CONNECTION_CONFIRM.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readShort() == (short) 0x2, "Incorrect source reference code");
-        assertTrue(userData.readByte() == ProtocolClass.CLASS_1.getCode(), "Incorrect protocol class");
+        assertThat(userData.writerIndex()).isEqualTo(7);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x6);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.CONNECTION_CONFIRM.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readShort()).isEqualTo((short) 0x2);
+        assertThat(userData.readByte()).isEqualTo(ProtocolClass.CLASS_1.getCode());
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeConnectionConfirm() throws Exception {
         buf.writeByte(0x6) // header length
             .writeByte(TpduCode.CONNECTION_CONFIRM.getCode())
@@ -233,37 +235,37 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ConnectionConfirmTpdu requestTpdu = (ConnectionConfirmTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(requestTpdu.getTpduCode() == TpduCode.CONNECTION_CONFIRM, "Message code not correct");
-        assertTrue(requestTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(requestTpdu.getSourceReference() == (short) 0x2, "Message source reference not correct");
-        assertTrue(requestTpdu.getProtocolClass() == ProtocolClass.CLASS_0, "Message protocol class reference not correct");
-        assertTrue(requestTpdu.getParameters().isEmpty(), "Message contains paramaters");
+        assertThat(requestTpdu.getTpduCode()).isEqualTo(TpduCode.CONNECTION_CONFIRM);
+        assertThat(requestTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(requestTpdu.getSourceReference()).isEqualTo((short) 0x2);
+        assertThat(requestTpdu.getProtocolClass()).isEqualTo(ProtocolClass.CLASS_0);
+        assertThat(requestTpdu.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeDisconnectionConfirm() throws Exception {
         DisconnectConfirmTpdu tpdu = new DisconnectConfirmTpdu((short) 0x1, (short) (0x2), Collections.emptyList(), buf);
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 6, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x5, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.DISCONNECT_CONFIRM.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readShort() == (short) 0x2, "Incorrect source reference code");
+        assertThat(userData.writerIndex()).isEqualTo(6);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x5);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.DISCONNECT_CONFIRM.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readShort()).isEqualTo((short) 0x2);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeDisconnectionConfirm() throws Exception {
         buf.writeByte(0x5) // header length
             .writeByte(TpduCode.DISCONNECT_CONFIRM.getCode())
@@ -274,36 +276,36 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         DisconnectConfirmTpdu requestTpdu = (DisconnectConfirmTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(requestTpdu.getTpduCode() == TpduCode.DISCONNECT_CONFIRM, "Message code not correct");
-        assertTrue(requestTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(requestTpdu.getSourceReference() == (short) 0x2, "Message source reference not correct");
-        assertTrue(requestTpdu.getParameters().isEmpty(), "Message contains paramaters");
+        assertThat(requestTpdu.getTpduCode()).isEqualTo(TpduCode.DISCONNECT_CONFIRM);
+        assertThat(requestTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(requestTpdu.getSourceReference()).isEqualTo((short) 0x2);
+        assertThat(requestTpdu.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeError() throws Exception {
         ErrorTpdu tpdu = new ErrorTpdu((short) 0x1, RejectCause.REASON_NOT_SPECIFIED, Collections.emptyList(), buf);
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 5, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x4, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.TPDU_ERROR.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readByte() == RejectCause.REASON_NOT_SPECIFIED.getCode(), "Incorrect reject cause code");
+        assertThat(userData.writerIndex()).isEqualTo(5);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x4);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.TPDU_ERROR.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readByte()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED.getCode());
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeCallingParameter() throws Exception {
         ArrayList<Parameter> parmameters = new ArrayList<>();
         CallingTsapParameter callingParameter = new CallingTsapParameter(DeviceGroup.PG_OR_PC, (byte) 0x7, (byte) 0xe1); // slot number too big and overflows into rack
@@ -312,25 +314,25 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 9, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x8, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.TPDU_ERROR.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readByte() == RejectCause.REASON_NOT_SPECIFIED.getCode(), "Incorrect reject cause code");
-        assertTrue(userData.readByte() == ParameterCode.CALLING_TSAP.getCode(), "Incorrect parameter code");
-        assertTrue(userData.readByte() == (byte) 0x2, "Incorrect parameter length");
-        assertTrue(userData.readByte() == DeviceGroup.PG_OR_PC.getCode(), "Incorrect device group code");
+        assertThat(userData.writerIndex()).isEqualTo(9);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x8);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.TPDU_ERROR.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readByte()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED.getCode());
+        assertThat(userData.readByte()).isEqualTo(ParameterCode.CALLING_TSAP.getCode());
+        assertThat(userData.readByte()).isEqualTo((byte) 0x2);
+        assertThat(userData.readByte()).isEqualTo(DeviceGroup.PG_OR_PC.getCode());
         byte rackAndSlot = userData.readByte();
-        assertTrue((rackAndSlot & 0xf0) >> 4 == 0x7, "Incorrect rack number");
-        assertTrue((rackAndSlot & 0x0f) == (0xe1 & 0x0f), "Incorrect slot number");
+        assertThat((rackAndSlot & 0xf0) >> 4).isEqualTo(0x7);
+        assertThat((rackAndSlot & 0x0f)).isEqualTo(0xe1 & 0x0f);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeChecksumParameter() throws Exception {
         ArrayList<Parameter> parmameters = new ArrayList<>();
         ChecksumParameter checksumParameter = new ChecksumParameter((byte) 0x77);
@@ -339,22 +341,22 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 8, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x7, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.TPDU_ERROR.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readByte() == RejectCause.REASON_NOT_SPECIFIED.getCode(), "Incorrect reject cause code");
-        assertTrue(userData.readByte() == ParameterCode.CHECKSUM.getCode(), "Incorrect parameter code");
-        assertTrue(userData.readByte() == (byte) 0x1, "Incorrect parameter length");
-        assertTrue(userData.readByte() == 0x77, "Incorrect checksum");
+        assertThat(userData.writerIndex()).isEqualTo(8);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x7);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.TPDU_ERROR.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readByte()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED.getCode());
+        assertThat(userData.readByte()).isEqualTo(ParameterCode.CHECKSUM.getCode());
+        assertThat(userData.readByte()).isEqualTo((byte) 0x1);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x77);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeAditionalInformationParameter() throws Exception {
         ArrayList<Parameter> parmameters = new ArrayList<>();
         byte[] data = {'O', 'p', 'p', 's'};
@@ -364,25 +366,25 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 11, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0xA, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.TPDU_ERROR.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readByte() == RejectCause.REASON_NOT_SPECIFIED.getCode(), "Incorrect reject cause code");
-        assertTrue(userData.readByte() == ParameterCode.DISCONNECT_ADDITIONAL_INFORMATION.getCode(), "Incorrect parameter code");
-        assertTrue(userData.readByte() == (byte) 0x4, "Incorrect parameter length");
-        assertTrue(userData.readByte() == 'O', "Incorrect data");
-        assertTrue(userData.readByte() == 'p', "Incorrect data");
-        assertTrue(userData.readByte() == 'p', "Incorrect data");
-        assertTrue(userData.readByte() == 's', "Incorrect data");
+        assertThat(userData.writerIndex()).isEqualTo(11);
+        assertThat(userData.readByte()).isEqualTo((byte) 0xA);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.TPDU_ERROR.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readByte()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED.getCode());
+        assertThat(userData.readByte()).isEqualTo(ParameterCode.DISCONNECT_ADDITIONAL_INFORMATION.getCode());
+        assertThat(userData.readByte()).isEqualTo((byte) 0x4);
+        assertThat(userData.readByte()).isEqualTo((byte) 'O');
+        assertThat(userData.readByte()).isEqualTo((byte) 'p');
+        assertThat(userData.readByte()).isEqualTo((byte) 'p');
+        assertThat(userData.readByte()).isEqualTo((byte) 's');
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeSizeParameter() throws Exception {
         ArrayList<Parameter> parmameters = new ArrayList<>();
         TpduSizeParameter sizeParameter = new TpduSizeParameter(TpduSize.SIZE_512);
@@ -391,22 +393,22 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
-        assertTrue(userData.writerIndex() == 8, "Incorrect message length");
-        assertTrue(userData.readByte() == (byte) 0x7, "Incorrect header length");
-        assertTrue(userData.readByte() == TpduCode.TPDU_ERROR.getCode(), "Incorrect Tpdu code");
-        assertTrue(userData.readShort() == (short) 0x1, "Incorrect destination reference code");
-        assertTrue(userData.readByte() == RejectCause.REASON_NOT_SPECIFIED.getCode(), "Incorrect reject cause code");
-        assertTrue(userData.readByte() == ParameterCode.TPDU_SIZE.getCode(), "Incorrect parameter code");
-        assertTrue(userData.readByte() == (byte) 0x1, "Incorrect parameter length");
-        assertTrue(userData.readByte() == TpduSize.SIZE_512.getCode(), "Incorrect tdpu size");
+        assertThat(userData.writerIndex()).isEqualTo(8);
+        assertThat(userData.readByte()).isEqualTo((byte) 0x7);
+        assertThat(userData.readByte()).isEqualTo(TpduCode.TPDU_ERROR.getCode());
+        assertThat(userData.readShort()).isEqualTo((short) 0x1);
+        assertThat(userData.readByte()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED.getCode());
+        assertThat(userData.readByte()).isEqualTo(ParameterCode.TPDU_SIZE.getCode());
+        assertThat(userData.readByte()).isEqualTo((byte) 0x1);
+        assertThat(userData.readByte()).isEqualTo(TpduSize.SIZE_512.getCode());
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeError() throws Exception {
         buf.writeByte(0x4) // header length
             .writeByte(TpduCode.TPDU_ERROR.getCode())
@@ -416,65 +418,65 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ErrorTpdu errorTpdu = (ErrorTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(errorTpdu.getTpduCode() == TpduCode.TPDU_ERROR, "Message code not correct");
-        assertTrue(errorTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(errorTpdu.getRejectCause() == RejectCause.REASON_NOT_SPECIFIED, "Message reject cause not correct");
-        assertTrue(errorTpdu.getParameters().isEmpty(), "Message contains paramaters");
+        assertThat(errorTpdu.getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
+        assertThat(errorTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(errorTpdu.getRejectCause()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED);
+        assertThat(errorTpdu.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeNullRequest() throws Exception {
         ConnectionRequestTpdu tpdu = null;
 
         isoTPProtocol.encode(ctx, tpdu, out);
-        assertTrue(out.size() == 0, "Message decoded when null passed");
+        assertThat(out).isEmpty();
 
         isoTPProtocol.encode(ctx, null, out);
-        assertTrue(out.size() == 0, "Message decoded when null passed");
+        assertThat(out).isEmpty();
     }
 
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeNull() throws Exception {
         IsoOnTcpMessage in = new IsoOnTcpMessage(buf);
 
         isoTPProtocol.decode(ctx, in, out);
-        assertTrue(out.size() == 0, "Message decoded when blank message passed");
+        assertThat(out).isEmpty();
 
         isoTPProtocol.decode(ctx, null, out);
-        assertTrue(out.size() == 0, "Message decoded when blank message passed");
+        assertThat(out).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encodeUnsupported() throws Exception {
         ArrayList<Parameter> parmameters = new ArrayList<>();
         CustomTpdu tpdu = new CustomTpdu((byte)0x7F, parmameters, buf);
 
         isoTPProtocol.encode(ctx, tpdu, out);
-        assertTrue(out.size() == 0, "Message encoded when unsupported Tpdu code passed");
+        assertThat(out).isEmpty();
    }
 
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeUnsupported() throws Exception {
         IsoOnTcpMessage in = new IsoOnTcpMessage(buf);
         buf.writeByte(0x3) // header length
             .writeByte(0x7F)
             .writeShort(0x01); // destination reference
         isoTPProtocol.decode(ctx, in, out);
-        assertTrue(out.size() == 0, "Message decoded when unsupported Tpdu code passed");
+        assertThat(out).isEmpty();
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeCallingParameter() throws Exception {
         buf.writeByte(0x8) // header length
             .writeByte(TpduCode.TPDU_ERROR.getCode())
@@ -488,23 +490,23 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ErrorTpdu errorTpdu = (ErrorTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(errorTpdu.getTpduCode() == TpduCode.TPDU_ERROR, "Message code not correct");
-        assertTrue(errorTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(errorTpdu.getRejectCause() == RejectCause.REASON_NOT_SPECIFIED, "Message reject cause not correct");
-        assertTrue(errorTpdu.getParameters().size() == 1, "Incorrect number of parameters");
+        assertThat(errorTpdu.getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
+        assertThat(errorTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(errorTpdu.getRejectCause()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED);
+        assertThat(errorTpdu.getParameters()).hasSize(1);
         CallingTsapParameter parameter = (CallingTsapParameter) errorTpdu.getParameters().get(0);
-        assertTrue(parameter.getType() == ParameterCode.CALLING_TSAP, "Parameter type incorrect");
-        assertTrue(parameter.getDeviceGroup() == DeviceGroup.PG_OR_PC, "Device group incorrect");
-        assertTrue(parameter.getRackNumber() == 0x1, "Rack number incorrect");
-        assertTrue(parameter.getSlotNumber() == 0x7, "Slot number incorrect");
+        assertThat(parameter.getType()).isEqualTo(ParameterCode.CALLING_TSAP);
+        assertThat(parameter.getDeviceGroup()).isEqualTo(DeviceGroup.PG_OR_PC);
+        assertThat(parameter.getRackNumber()).isEqualTo((byte) 0x1);
+        assertThat(parameter.getSlotNumber()).isEqualTo((byte) 0x7);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeCalledParameter() throws Exception {
         buf.writeByte(0x8) // header length
             .writeByte(TpduCode.TPDU_ERROR.getCode())
@@ -518,23 +520,23 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ErrorTpdu errorTpdu = (ErrorTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(errorTpdu.getTpduCode() == TpduCode.TPDU_ERROR, "Message code not correct");
-        assertTrue(errorTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(errorTpdu.getRejectCause() == RejectCause.REASON_NOT_SPECIFIED, "Message reject cause not correct");
-        assertTrue(errorTpdu.getParameters().size() == 1, "Incorrect number of parameters");
+        assertThat(errorTpdu.getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
+        assertThat(errorTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(errorTpdu.getRejectCause()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED);
+        assertThat(errorTpdu.getParameters()).hasSize(1);
         CalledTsapParameter parameter = (CalledTsapParameter) errorTpdu.getParameters().get(0);
-        assertTrue(parameter.getType() == ParameterCode.CALLED_TSAP, "Parameter type incorrect");
-        assertTrue(parameter.getDeviceGroup() == DeviceGroup.PG_OR_PC, "Device group incorrect");
-        assertTrue(parameter.getRackNumber() == 0x2, "Rack number incorrect");
-        assertTrue(parameter.getSlotNumber() == 0x3, "Slot number incorrect");
+        assertThat(parameter.getType()).isEqualTo(ParameterCode.CALLED_TSAP);
+        assertThat(parameter.getDeviceGroup()).isEqualTo(DeviceGroup.PG_OR_PC);
+        assertThat(parameter.getRackNumber()).isEqualTo((byte) 0x2);
+        assertThat(parameter.getSlotNumber()).isEqualTo((byte) 0x3);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeChecksumParameter() throws Exception {
         buf.writeByte(0x8) // header length
             .writeByte(TpduCode.TPDU_ERROR.getCode())
@@ -547,21 +549,21 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ErrorTpdu errorTpdu = (ErrorTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(errorTpdu.getTpduCode() == TpduCode.TPDU_ERROR, "Message code not correct");
-        assertTrue(errorTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(errorTpdu.getRejectCause() == RejectCause.REASON_NOT_SPECIFIED, "Message reject cause not correct");
-        assertTrue(errorTpdu.getParameters().size() == 1, "Incorrect number of parameters");
+        assertThat(errorTpdu.getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
+        assertThat(errorTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(errorTpdu.getRejectCause()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED);
+        assertThat(errorTpdu.getParameters()).hasSize(1);
         ChecksumParameter parameter = (ChecksumParameter) errorTpdu.getParameters().get(0);
-        assertTrue(parameter.getType() == ParameterCode.CHECKSUM, "Parameter type incorrect");
-        assertTrue(parameter.getChecksum() == 0x33, "Checksum incorrect");
+        assertThat(parameter.getType()).isEqualTo(ParameterCode.CHECKSUM);
+        assertThat(parameter.getChecksum()).isEqualTo((byte) 0x33);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeSizeParameter() throws Exception {
         buf.writeByte(0x8) // header length
             .writeByte(TpduCode.TPDU_ERROR.getCode())
@@ -574,21 +576,21 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ErrorTpdu errorTpdu = (ErrorTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(errorTpdu.getTpduCode() == TpduCode.TPDU_ERROR, "Message code not correct");
-        assertTrue(errorTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(errorTpdu.getRejectCause() == RejectCause.REASON_NOT_SPECIFIED, "Message reject cause not correct");
-        assertTrue(errorTpdu.getParameters().size() == 1, "Incorrect number of parameters");
+        assertThat(errorTpdu.getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
+        assertThat(errorTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(errorTpdu.getRejectCause()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED);
+        assertThat(errorTpdu.getParameters()).hasSize(1);
         TpduSizeParameter parameter = (TpduSizeParameter) errorTpdu.getParameters().get(0);
-        assertTrue(parameter.getType() == ParameterCode.TPDU_SIZE, "Parameter type incorrect");
-        assertTrue(parameter.getTpduSize() == TpduSize.SIZE_256, "Size incorrect");
+        assertThat(parameter.getType()).isEqualTo(ParameterCode.TPDU_SIZE);
+        assertThat(parameter.getTpduSize()).isEqualTo(TpduSize.SIZE_256);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decodeAdditionalInformationParameter() throws Exception {
         buf.writeByte(0x8) // header length
             .writeByte(TpduCode.TPDU_ERROR.getCode())
@@ -605,21 +607,22 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.decode(ctx, in, out);
 
-        assertTrue(out.size() == 1, "Message not decoded");
+        assertThat(out).hasSize(1).overridingErrorMessage("Message not decoded");
 
         ErrorTpdu errorTpdu = (ErrorTpdu) ((IsoTPMessage) out.get(0)).getTpdu();
 
-        assertTrue(errorTpdu.getTpduCode() == TpduCode.TPDU_ERROR, "Message code not correct");
-        assertTrue(errorTpdu.getDestinationReference() == (short) 0x1, "Message destination reference not correct");
-        assertTrue(errorTpdu.getRejectCause() == RejectCause.REASON_NOT_SPECIFIED, "Message reject cause not correct");
-        assertTrue(errorTpdu.getParameters().size() == 1, "Incorrect number of parameters");
+        assertThat(errorTpdu.getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
+        assertThat(errorTpdu.getDestinationReference()).isEqualTo((short) 0x1);
+        assertThat(errorTpdu.getRejectCause()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED);
+        assertThat(errorTpdu.getParameters()).hasSize(1);
         DisconnectAdditionalInformationParameter parameter = (DisconnectAdditionalInformationParameter) errorTpdu.getParameters().get(0);
-        assertTrue(parameter.getType() == ParameterCode.DISCONNECT_ADDITIONAL_INFORMATION, "Parameter type incorrect");
+        assertThat(parameter.getType()).isEqualTo(ParameterCode.DISCONNECT_ADDITIONAL_INFORMATION);
         byte[] data = parameter.getData();
-        assertTrue(data[0] == 'E', "Data incorrect");
-        assertTrue(data[1] == 'r', "Data incorrect");
-        assertTrue(data[2] == 'r', "Data incorrect");
-        assertTrue(data[3] == 'o', "Data incorrect");
-        assertTrue(data[4] == 'r', "Data incorrect");
+        assertThat(data[0]).isEqualTo((byte) 'E');
+        assertThat(data[1]).isEqualTo((byte) 'r');
+        assertThat(data[2]).isEqualTo((byte) 'r');
+        assertThat(data[3]).isEqualTo((byte) 'o');
+        assertThat(data[4]).isEqualTo((byte) 'r');
     }
+
 }
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessageTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessageTests.java
index aa153bc..8f73a5b 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessageTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessageTests.java
@@ -19,25 +19,26 @@ under the License.
 
 package org.apache.plc4x.java.isotp.netty.model;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
 import org.apache.plc4x.java.isotp.netty.model.tpdus.ErrorTpdu;
 import org.apache.plc4x.java.isotp.netty.model.types.RejectCause;
 import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.Collections;
 import java.util.List;
 
-import static org.junit.jupiter.api.Assertions.*;
-
-class IsoTPMessageTests {
+public class IsoTPMessageTests {
 
     @Test
-    @Tag("fast")
-    void isoTPMessage() {
+    @Category(FastTests.class)
+    public void isoTPMessage() {
         short destinationReference = 0x1;
         RejectCause rejectCause = RejectCause.REASON_NOT_SPECIFIED;
         List<Parameter> parameters = Collections.emptyList();
@@ -49,10 +50,10 @@ class IsoTPMessageTests {
         errorData.writeByte(0x72);
         userData.writeByte(0x32);
 
-        assertTrue(isoTpMessage.getTpdu().getTpduCode() == TpduCode.TPDU_ERROR, "Unexpected Tpdu");
+        assertThat(isoTpMessage.getTpdu().getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
         // Question: do we need two user data fields?
-        assertTrue(tpdu.getUserData().readByte() == (byte) 0x72, "Unexpected user data");
-        assertTrue(isoTpMessage.getUserData().readByte() == (byte) 0x32, "Unexpected user data");
+        assertThat(tpdu.getUserData().readByte()).isEqualTo((byte) 0x72);
+        assertThat(isoTpMessage.getUserData().readByte()).isEqualTo((byte) 0x32);
     }
 
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
index 8bbb052..0a53457 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
@@ -19,39 +19,43 @@ under the License.
 
 package org.apache.plc4x.java.isotp.netty.model.params;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
 import org.apache.plc4x.java.isotp.netty.model.types.TpduSize;
-import org.junit.jupiter.api.*;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-import static org.junit.jupiter.api.Assertions.*;
+public class ParameterTests {
 
-class ParameterTest {
     @Test
-    @Tag("fast")
-    void checksumPartameter() {
+    @Category(FastTests.class)
+    public void checksumPartameter() {
         ChecksumParameter checksumParameter = new ChecksumParameter((byte)1);
 
-        assertTrue(checksumParameter.getChecksum() == (byte)1, "Checksum incorrect");
-        assertTrue(checksumParameter.getType() == ParameterCode.CHECKSUM);
+        assertThat(checksumParameter.getChecksum()).isEqualTo((byte)1).withFailMessage("Checksum incorrect");
+        assertThat(checksumParameter.getType()).isEqualTo(ParameterCode.CHECKSUM);
     }
 
     @Test
-    @Tag("fast")
-    void disconnectAdditionalInformationParameter() {
+    @Category(FastTests.class)
+    public void disconnectAdditionalInformationParameter() {
         byte[] data = {(byte)1, (byte)2};
         DisconnectAdditionalInformationParameter disconnectParameter = new DisconnectAdditionalInformationParameter(data);
 
-        assertTrue(disconnectParameter.getData()[0] == (byte)1, "Return parameter incorrect");
-        assertTrue(disconnectParameter.getData()[1] == (byte)2, "Return parameter incorrect");
-        assertTrue(disconnectParameter.getType() == ParameterCode.DISCONNECT_ADDITIONAL_INFORMATION);
+        assertThat(disconnectParameter.getData()[0]).isEqualTo((byte)1).withFailMessage("Return parameter incorrect");
+        assertThat(disconnectParameter.getData()[1]).isEqualTo((byte)2).withFailMessage("Return parameter incorrect");
+        assertThat(disconnectParameter.getType()).isEqualTo(ParameterCode.DISCONNECT_ADDITIONAL_INFORMATION);
     }
 
     @Test
-    @Tag("fast")
-    void tpduSizeParameter() {
+    @Category(FastTests.class)
+    public void tpduSizeParameter() {
         TpduSizeParameter tpduSizeParameter = new TpduSizeParameter(TpduSize.SIZE_512);
 
-        assertTrue(tpduSizeParameter.getTpduSize() == TpduSize.SIZE_512, "Tpdu size incorrect");
-        assertTrue(tpduSizeParameter.getType() == ParameterCode.TPDU_SIZE);
+        assertThat(tpduSizeParameter.getTpduSize()).isEqualTo(TpduSize.SIZE_512).withFailMessage("Tpdu size incorrect");
+        assertThat(tpduSizeParameter.getType()).isEqualTo(ParameterCode.TPDU_SIZE);
     }
+
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
index 0ed76f7..f228717 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
@@ -19,46 +19,46 @@ under the License.
 
 package org.apache.plc4x.java.isotp.netty.model.params;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.isotp.netty.model.types.DeviceGroup;
 import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
-import org.junit.jupiter.api.*;
+import org.apache.plc4x.test.FastTests;
+import org.junit.After;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-import static org.junit.jupiter.api.Assertions.*;
+public class TsapParameterTests {
 
-class TsapParameterTests {
     private TsapParameter tsapParameter;
 
-    @BeforeEach
-    void setUp() {
-    }
-
-    @AfterEach
-    void tearDown() {
+    @After
+    public void tearDown() {
         tsapParameter = null;
     }
 
     @Test
-    @Tag("fast")
-    void calledPartameter() {
+    @Category(FastTests.class)
+    public void calledPartameter() {
         DeviceGroup deviceGroup = DeviceGroup.valueOf((byte)0);
         tsapParameter = new CalledTsapParameter(deviceGroup, (byte)1, (byte)4);
 
-        assertTrue(tsapParameter.getDeviceGroup() == DeviceGroup.valueOf((byte)0), "Device group incorrect");
-        assertTrue(tsapParameter.getRackNumber() == (byte)1, "Rack number not correct");
-        assertTrue(tsapParameter.getSlotNumber() == (byte)4, "Slot number not coorect");
-        assertTrue(tsapParameter.getType() == ParameterCode.CALLED_TSAP);
+        assertThat(tsapParameter.getDeviceGroup()).isEqualTo(DeviceGroup.valueOf((byte)0)).withFailMessage("Device group incorrect");
+        assertThat(tsapParameter.getRackNumber()).isEqualTo((byte)1).withFailMessage("Rack number not correct");
+        assertThat(tsapParameter.getSlotNumber()).isEqualTo((byte)4).withFailMessage("Slot number not coorect");
+        assertThat(tsapParameter.getType()).isEqualTo(ParameterCode.CALLED_TSAP);
     }
 
     @Test
-    @Tag("fast")
-    void callingPartameter() {
+    @Category(FastTests.class)
+    public void callingPartameter() {
         DeviceGroup deviceGroup = DeviceGroup.valueOf((byte)0);
         tsapParameter = new CallingTsapParameter(deviceGroup, (byte)2, (byte)5);
 
-        assertTrue(tsapParameter.getDeviceGroup() == DeviceGroup.valueOf((byte)0), "Device group incorrect");
-        assertTrue(tsapParameter.getRackNumber() == (byte)2, "Rack number not correct");
-        assertTrue(tsapParameter.getSlotNumber() == (byte)5, "Slot number not coorect");
-        assertTrue(tsapParameter.getType() == ParameterCode.CALLING_TSAP);
+        assertThat(tsapParameter.getDeviceGroup()).isEqualTo(DeviceGroup.valueOf((byte)0)).withFailMessage("Device group incorrect");
+        assertThat(tsapParameter.getRackNumber()).isEqualTo((byte)2).withFailMessage("Rack number not correct");
+        assertThat(tsapParameter.getSlotNumber()).isEqualTo((byte)5).withFailMessage("Slot number not coorect");
+        assertThat(tsapParameter.getType()).isEqualTo(ParameterCode.CALLING_TSAP);
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/tpdus/IsotpModelTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/tpdus/IsotpModelTests.java
index 8bebc6a..33b69a8 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/tpdus/IsotpModelTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/tpdus/IsotpModelTests.java
@@ -19,6 +19,8 @@ under the License.
 
 package org.apache.plc4x.java.isotp.netty.model.tpdus;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import org.apache.plc4x.java.isotp.netty.model.params.CallingTsapParameter;
@@ -26,20 +28,19 @@ import org.apache.plc4x.java.isotp.netty.model.params.ChecksumParameter;
 import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
 import org.apache.plc4x.java.isotp.netty.model.params.TpduSizeParameter;
 import org.apache.plc4x.java.isotp.netty.model.types.*;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-class IsotpModelTests {
+public class IsotpModelTests {
 
     @Test
-    @Tag("Fast")
-    void errorTpdu() {
+    @Category(FastTests.class)
+    public void errorTpdu() {
         short destinationReference = 0x1;
         RejectCause rejectCause = RejectCause.REASON_NOT_SPECIFIED;
         List<Parameter> parameters = Collections.emptyList();
@@ -49,16 +50,16 @@ class IsotpModelTests {
 
         ErrorTpdu tpdu = new ErrorTpdu(destinationReference, rejectCause, parameters, userData);
 
-        assertTrue(tpdu.getTpduCode() == TpduCode.TPDU_ERROR);
-        assertTrue(tpdu.getDestinationReference() == 0x1, "Unexpected destination reference");
-        assertTrue(tpdu.getRejectCause() == RejectCause.REASON_NOT_SPECIFIED);
-        assertTrue(tpdu.getParameters().isEmpty(), "Unexpected parameters");
-        assertTrue(tpdu.getUserData().readByte() == (byte) 0x7F, "Unexpected user data");
+        assertThat(tpdu.getTpduCode()).isEqualTo(TpduCode.TPDU_ERROR);
+        assertThat(tpdu.getDestinationReference()).isEqualTo((short) 0x1).withFailMessage("Unexpected destination reference");
+        assertThat(tpdu.getRejectCause()).isEqualTo(RejectCause.REASON_NOT_SPECIFIED);
+        assertThat(tpdu.getParameters()).isEmpty();
+        assertThat(tpdu.getUserData().readByte()).isEqualTo((byte) 0x7F).withFailMessage("Unexpected user data");
     }
 
     @Test
-    @Tag("Fast")
-    void errorTpduParameter() {
+    @Category(FastTests.class)
+    public void errorTpduParameter() {
         short destinationReference = 0x1;
         RejectCause rejectCause = RejectCause.REASON_NOT_SPECIFIED;
         ArrayList<Parameter> parameters = new ArrayList<>();
@@ -71,15 +72,15 @@ class IsotpModelTests {
         parameters.add(new TpduSizeParameter(TpduSize.SIZE_1024));
         parameters.add(new ChecksumParameter((byte) 0xFF));
 
-        assertTrue(tpdu.getParameters().size() == 2, "Unexpected number of parameters");
-        assertTrue(tpdu.getParameters().containsAll(parameters), "Unexpected parameter");
-        assertTrue(tpdu.getParameter(ChecksumParameter.class).isPresent(), "Checksum parameter should exist");
-        assertTrue(!tpdu.getParameter(CallingTsapParameter.class).isPresent(), "CallingTsapParameter parameter should not exist");
+        assertThat(tpdu.getParameters()).hasSize(2).withFailMessage("Unexpected number of parameters");
+        assertThat(tpdu.getParameters()).containsAll(parameters).withFailMessage("Unexpected parameter");
+        assertThat(tpdu.getParameter(ChecksumParameter.class).isPresent()).isTrue().withFailMessage("Checksum parameter should exist");
+        assertThat(!tpdu.getParameter(CallingTsapParameter.class).isPresent()).isTrue().withFailMessage("CallingTsapParameter parameter should not exist");
     }
 
     @Test
-    @Tag("Fast")
-    void dataTpdu() {
+    @Category(FastTests.class)
+    public void dataTpdu() {
         List<Parameter> parameters = Collections.emptyList();
         ByteBuf userData = Unpooled.buffer();
 
@@ -87,16 +88,16 @@ class IsotpModelTests {
 
         DataTpdu tpdu = new DataTpdu(true, (byte) 0x7F, parameters, userData);
 
-        assertTrue(tpdu.getTpduCode() == TpduCode.DATA);
-        assertTrue(tpdu.isEot(), "Unexpected eot reference");
-        assertTrue(tpdu.getTpduRef() == 0x7F);
-        assertTrue(tpdu.getParameters().isEmpty(), "Unexpected parameters");
-        assertTrue(tpdu.getUserData().readByte() == (byte) 0x66, "Unexpected user data");
+        assertThat(tpdu.getTpduCode()).isEqualTo(TpduCode.DATA);
+        assertThat(tpdu.isEot()).isTrue().withFailMessage("Unexpected eot reference");
+        assertThat(tpdu.getTpduRef()).isEqualTo((byte) 0x7F);
+        assertThat(tpdu.getParameters().isEmpty()).isTrue().withFailMessage("Unexpected parameters");
+        assertThat(tpdu.getUserData().readByte()).isEqualTo((byte) 0x66).withFailMessage("Unexpected user data");
     }
 
     @Test
-    @Tag("Fast")
-    void connectionRequestTpdu() {
+    @Category(FastTests.class)
+    public void connectionRequestTpdu() {
         short destinationReference = 0x1;
         short sourceReference = 0x2;
         ProtocolClass protocolClass = ProtocolClass.CLASS_0;
@@ -107,17 +108,17 @@ class IsotpModelTests {
 
         ConnectionRequestTpdu tpdu = new ConnectionRequestTpdu(destinationReference, sourceReference, protocolClass, parameters, userData);
 
-        assertTrue(tpdu.getTpduCode() == TpduCode.CONNECTION_REQUEST);
-        assertTrue(tpdu.getDestinationReference() == 0x1, "Unexpected destination reference");
-        assertTrue(tpdu.getSourceReference() == 0x2, "Unexpected source reference");
-        assertTrue(tpdu.getProtocolClass() == ProtocolClass.CLASS_0);
-        assertTrue(tpdu.getParameters().isEmpty(), "Unexpected parameters");
-        assertTrue(tpdu.getUserData().readByte() == (byte) 0x33, "Unexpected user data");
+        assertThat(tpdu.getTpduCode() == TpduCode.CONNECTION_REQUEST);
+        assertThat(tpdu.getDestinationReference()).isEqualTo((short) 0x1).withFailMessage("Unexpected destination reference");
+        assertThat(tpdu.getSourceReference()).isEqualTo((short) 0x2).withFailMessage("Unexpected source reference");
+        assertThat(tpdu.getProtocolClass()).isEqualTo(ProtocolClass.CLASS_0);
+        assertThat(tpdu.getParameters().isEmpty()).isTrue().withFailMessage("Unexpected parameters");
+        assertThat(tpdu.getUserData().readByte()).isEqualTo((byte) 0x33).withFailMessage("Unexpected user data");
     }
 
     @Test
-    @Tag("Fast")
-    void connectionConfirmTpdu() {
+    @Category(FastTests.class)
+    public void connectionConfirmTpdu() {
         short destinationReference = 0x3;
         short sourceReference = 0x4;
         ProtocolClass protocolClass = ProtocolClass.CLASS_1;
@@ -128,17 +129,17 @@ class IsotpModelTests {
 
         ConnectionConfirmTpdu tpdu = new ConnectionConfirmTpdu(destinationReference, sourceReference, protocolClass, parameters, userData);
 
-        assertTrue(tpdu.getTpduCode() == TpduCode.CONNECTION_CONFIRM);
-        assertTrue(tpdu.getDestinationReference() == 0x3, "Unexpected destination reference");
-        assertTrue(tpdu.getSourceReference() == 0x4, "Unexpected source reference");
-        assertTrue(tpdu.getProtocolClass() == ProtocolClass.CLASS_1);
-        assertTrue(tpdu.getParameters().isEmpty(), "Unexpected parameters");
-        assertTrue(tpdu.getUserData().readByte() == (byte) 0x44, "Unexpected user data");
+        assertThat(tpdu.getTpduCode() == TpduCode.CONNECTION_CONFIRM);
+        assertThat(tpdu.getDestinationReference()).isEqualTo((short) 0x3).withFailMessage("Unexpected destination reference");
+        assertThat(tpdu.getSourceReference()).isEqualTo((short) 0x4).withFailMessage("Unexpected source reference");
+        assertThat(tpdu.getProtocolClass()).isEqualTo(ProtocolClass.CLASS_1);
+        assertThat(tpdu.getParameters().isEmpty()).isTrue().withFailMessage("Unexpected parameters");
+        assertThat(tpdu.getUserData().readByte()).isEqualTo((byte) 0x44).withFailMessage("Unexpected user data");
     }
 
     @Test
-    @Tag("Fast")
-    void disconnectionRequestTpdu() {
+    @Category(FastTests.class)
+    public void disconnectionRequestTpdu() {
         short destinationReference = 0x1;
         short sourceReference = 0x2;
         DisconnectReason disconnectReason = DisconnectReason.ADDRESS_UNKNOWN;
@@ -149,17 +150,17 @@ class IsotpModelTests {
 
         DisconnectRequestTpdu tpdu = new DisconnectRequestTpdu(destinationReference, sourceReference, disconnectReason, parameters, userData);
 
-        assertTrue(tpdu.getTpduCode() == TpduCode.DISCONNECT_REQUEST);
-        assertTrue(tpdu.getDestinationReference() == 0x1, "Unexpected destination reference");
-        assertTrue(tpdu.getSourceReference() == 0x2, "Unexpected source reference");
-        assertTrue(tpdu.getDisconnectReason() == DisconnectReason.ADDRESS_UNKNOWN);
-        assertTrue(tpdu.getParameters().isEmpty(), "Unexpected parameters");
-        assertTrue(tpdu.getUserData().readByte() == (byte) 0x22, "Unexpected user data");
+        assertThat(tpdu.getTpduCode() == TpduCode.DISCONNECT_REQUEST);
+        assertThat(tpdu.getDestinationReference()).isEqualTo((short) 0x1).withFailMessage("Unexpected destination reference");
+        assertThat(tpdu.getSourceReference()).isEqualTo((short) 0x2).withFailMessage("Unexpected source reference");
+        assertThat(tpdu.getDisconnectReason()).isEqualTo(DisconnectReason.ADDRESS_UNKNOWN);
+        assertThat(tpdu.getParameters().isEmpty()).isTrue().withFailMessage("Unexpected parameters");
+        assertThat(tpdu.getUserData().readByte()).isEqualTo((byte) 0x22).withFailMessage("Unexpected user data");
     }
 
     @Test
-    @Tag("Fast")
-    void disconnectionConfirmTpdu() {
+    @Category(FastTests.class)
+    public void disconnectionConfirmTpdu() {
         short destinationReference = 0x3;
         short sourceReference = 0x4;
         List<Parameter> parameters = Collections.emptyList();
@@ -169,11 +170,11 @@ class IsotpModelTests {
 
         DisconnectConfirmTpdu tpdu = new DisconnectConfirmTpdu(destinationReference, sourceReference, parameters, userData);
 
-        assertTrue(tpdu.getTpduCode() == TpduCode.DISCONNECT_CONFIRM);
-        assertTrue(tpdu.getDestinationReference() == 0x3, "Unexpected destination reference");
-        assertTrue(tpdu.getSourceReference() == 0x4, "Unexpected source reference");
-        assertTrue(tpdu.getParameters().isEmpty(), "Unexpected parameters");
-        assertTrue(tpdu.getUserData().readByte() == (byte) 0x11, "Unexpected user data");
+        assertThat(tpdu.getTpduCode() == TpduCode.DISCONNECT_CONFIRM);
+        assertThat(tpdu.getDestinationReference()).isEqualTo((short) 0x3).withFailMessage("Unexpected destination reference");
+        assertThat(tpdu.getSourceReference()).isEqualTo((short) 0x4).withFailMessage("Unexpected source reference");
+        assertThat(tpdu.getParameters().isEmpty()).isTrue().withFailMessage("Unexpected parameters");
+        assertThat(tpdu.getUserData().readByte()).isEqualTo((byte) 0x11).withFailMessage("Unexpected user data");
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
index ac629a5..7df9684 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
@@ -19,150 +19,150 @@ under the License.
 
 package org.apache.plc4x.java.isotp.netty.model.types;
 
-import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.function.Executable;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-class IsotpTypeTests {
+public class IsotpTypeTests {
 
     @Test
-    @Tag("fast")
-    void deviceGroup() {
+    @Category(FastTests.class)
+    public void deviceGroup() {
         DeviceGroup deviceGroup;
 
         deviceGroup = DeviceGroup.PG_OR_PC;
-        assertTrue(deviceGroup.getCode() == (byte)1, "code is not 1");
+        assertThat(deviceGroup.getCode()).isEqualTo((byte)1);
 
         deviceGroup = DeviceGroup.OS;
-        assertTrue(deviceGroup.getCode() == (byte)2, "code is not 2");
+        assertThat(deviceGroup.getCode()).isEqualTo((byte)2);
 
         deviceGroup = DeviceGroup.OTHERS;
-        assertTrue(deviceGroup.getCode() == (byte)3, "code is not 3");
+        assertThat(deviceGroup.getCode()).isEqualTo((byte)3);
     }
 
     @Test
-    @Tag("fast")
-    void deviceGroupUnknown() {
+    @Category(FastTests.class)
+    public void deviceGroupUnknown() {
         DeviceGroup deviceGroup = DeviceGroup.valueOf((byte)0x40);
 
-        assertNull(deviceGroup, "expected device group to be null");
+        assertThat(deviceGroup).isNull();
     }
 
 
     @Test
-    @Tag("fast")
-    void disconnectReason() {
+    @Category(FastTests.class)
+    public void disconnectReason() {
         DisconnectReason disconnectReason = DisconnectReason.ADDRESS_UNKNOWN;
 
-        assertTrue(DisconnectReason.valueOf((byte)3) == DisconnectReason.ADDRESS_UNKNOWN, "3 incorrectly mapped");
-        assertTrue(disconnectReason.getCode() == (byte)3, "code is not 3");
+        assertThat(DisconnectReason.valueOf((byte)3)).isEqualTo(DisconnectReason.ADDRESS_UNKNOWN).withFailMessage("3 incorrectly mapped");
+        assertThat(disconnectReason.getCode()).isEqualTo((byte)3);
     }
 
     @Test
-    @Tag("fast")
-    void diosconectReasonUnknown() {
+    @Category(FastTests.class)
+    public void diosconectReasonUnknown() {
         DisconnectReason disconnectReason = DisconnectReason.valueOf((byte)4);
 
-        assertNull(disconnectReason, "expected disconnect reason to be null");
+        assertThat(disconnectReason).isNull();
     }
 
     @Test
-    @Tag("fast")
-    void parameterCode() {
+    @Category(FastTests.class)
+    public void parameterCode() {
         ParameterCode parameterCode = ParameterCode.CALLING_TSAP;
 
-        assertTrue(ParameterCode.valueOf((byte)0xC1) == ParameterCode.CALLING_TSAP, "0xC1 incorrectly mapped");
-        assertTrue(parameterCode.getCode() == (byte)0xC1, "code is not 0xC1");
+        assertThat(ParameterCode.valueOf((byte)0xC1)).isEqualTo(ParameterCode.CALLING_TSAP);
+        assertThat(parameterCode.getCode()).isEqualTo((byte)0xC1);
     }
 
     @Test
-    @Tag("fast")
-    void parameterCodeUnknown() {
+    @Category(FastTests.class)
+    public void parameterCodeUnknown() {
         ParameterCode parameterCode = ParameterCode.valueOf((byte)0x90);
 
-        assertNull(parameterCode, "expected parameter code to be null");
+        assertThat(parameterCode).isNull();
     }
 
     @Test
-    @Tag("fast")
-    void protocolClass() {
+    @Category(FastTests.class)
+    public void protocolClass() {
         ProtocolClass protocolClass;
 
         protocolClass = ProtocolClass.CLASS_1;
-        assertTrue(protocolClass.getCode() == (byte)0x10, "code is not 0x10");
+        assertThat(protocolClass.getCode()).isEqualTo((byte)0x10);
 
         protocolClass = ProtocolClass.CLASS_2;
-        assertTrue(protocolClass.getCode() == (byte)0x20, "code is not 0x20");
+        assertThat(protocolClass.getCode()).isEqualTo((byte)0x20);
 
         protocolClass = ProtocolClass.CLASS_3;
-        assertTrue(protocolClass.getCode() == (byte)0x30, "code is not 0x30");
+        assertThat(protocolClass.getCode()).isEqualTo((byte)0x30);
 
         protocolClass = ProtocolClass.CLASS_4;
-        assertTrue(protocolClass.getCode() == (byte)0x40, "code is not 0x40");
+        assertThat(protocolClass.getCode()).isEqualTo((byte)0x40);
     }
 
     @Test
-    @Tag("fast")
-    void protocolClassUnknown() {
+    @Category(FastTests.class)
+    public void protocolClassUnknown() {
         ProtocolClass protocolClass = ProtocolClass.valueOf((byte)0x50);
 
-        assertNull(protocolClass, "expected protocol class to be null");
+        assertThat(protocolClass).isNull();
     }
 
     @Test
-    @Tag("fast")
-    void rejectCause() {
+    @Category(FastTests.class)
+    public void rejectCause() {
         RejectCause rejectCause = RejectCause.INVALID_PARAMETER_TYPE;
 
-        assertTrue(RejectCause.valueOf((byte)0x03) == RejectCause.INVALID_PARAMETER_TYPE, "0x03 incorrectly mapped");
-        assertTrue(rejectCause.getCode() == (byte)0x03, "code is not 0x03");
+        assertThat(RejectCause.valueOf((byte)0x03)).isEqualTo(RejectCause.INVALID_PARAMETER_TYPE);
+        assertThat(rejectCause.getCode()).isEqualTo((byte)0x03);
     }
 
     @Test
-    @Tag("fast")
-    void rejectClauseUnknown() {
+    @Category(FastTests.class)
+    public void rejectClauseUnknown() {
         RejectCause rejectCause = RejectCause.valueOf((byte)0x90);
 
-        assertNull(rejectCause, "expected reject cause to be null");
+        assertThat(rejectCause).isNull();
     }
 
     @Test
-    @Tag("fast")
-    void tpduCode() {
+    @Category(FastTests.class)
+    public void tpduCode() {
         TpduCode tpduCode = TpduCode.DATA;
 
-        assertTrue(TpduCode.valueOf((byte)0xF0) == TpduCode.DATA, "0xF0 incorrectly mapped");
-        assertTrue(tpduCode.getCode() == (byte)0xF0, "code is not 0xF0");
+        assertThat(TpduCode.valueOf((byte)0xF0)).isEqualTo(TpduCode.DATA);
+        assertThat(tpduCode.getCode()).isEqualTo((byte)0xF0);
     }
 
     @Test
-    @Tag("fast")
-    void tpduCodeUnknown() {
+    @Category(FastTests.class)
+    public void tpduCodeUnknown() {
         TpduCode tpduCode = TpduCode.valueOf((byte)0x01);
 
-        assertTrue(TpduCode.valueOf((byte)0xFF) == TpduCode.TPDU_UNKNOWN, "0xFF incorrectly mapped");
-        assertTrue(tpduCode.getCode() == (byte)0xFF, "code is not 0xFF");
+        assertThat(TpduCode.valueOf((byte)0xFF)).isEqualTo(TpduCode.TPDU_UNKNOWN);
+        assertThat(tpduCode.getCode()).isEqualTo((byte)0xFF);
     }
     
     @Test
-    @Tag("fast")
-    void typduSize() {
+    @Category(FastTests.class)
+    public void typduSize() {
         TpduSize tpduSize = TpduSize.SIZE_128;
 
-        assertTrue(TpduSize.valueOf((byte)0x07) == TpduSize.SIZE_128, "0x07 incorrectly mapped");
-        assertTrue(tpduSize.getCode() == (byte)0x07, "code is not 0x07");
-        assertEquals(tpduSize.getValue(), 128, "the value is not 128");
+        assertThat(TpduSize.valueOf((byte)0x07)).isEqualTo(TpduSize.SIZE_128);
+        assertThat(tpduSize.getCode()).isEqualTo((byte)0x07);
+        assertThat(tpduSize.getValue()).isEqualTo(128);
     }
 
     @Test
-    @Tag("fast")
-    void tpduSizeUnknown() {
+    @Category(FastTests.class)
+    public void tpduSizeUnknown() {
         TpduSize tpduSize = TpduSize.valueOf((byte)0x06);
 
-        assertNull(tpduSize, "expected tpdu size to be null");
+        assertThat(tpduSize).isNull();
     }
 
     /**
@@ -170,11 +170,11 @@ class IsotpTypeTests {
      * pdu sizes, then exactly that box should be returned.
      */
     @Test
-    @Tag("fast")
-    void tpduValueForGivenExactFit() {
+    @Category(FastTests.class)
+    public void tpduValueForGivenExactFit() {
         TpduSize tpduSize = TpduSize.valueForGivenSize(256);
 
-        assertEquals(TpduSize.SIZE_256, tpduSize, "expected tpdu size of 256");
+        assertThat(tpduSize).isEqualTo(TpduSize.SIZE_256);
     }
 
     /**
@@ -182,12 +182,12 @@ class IsotpTypeTests {
      * a pdu box, the method should return the next larger box.
      */
     @Test
-    @Tag("fast")
-    void tpduValueForGivenIntermediateSize() {
+    @Category(FastTests.class)
+    public void tpduValueForGivenIntermediateSize() {
         TpduSize tpduSize = TpduSize.valueForGivenSize(222);
 
-        assertEquals(TpduSize.SIZE_256, tpduSize, "expected tpdu size of 256");
-        assertNotEquals(222, tpduSize.getValue(), "the value is not 222");
+        assertThat(tpduSize).isEqualTo(TpduSize.SIZE_256);
+        assertThat(tpduSize.getValue()).isNotEqualTo(222);
     }
 
     /**
@@ -195,12 +195,12 @@ class IsotpTypeTests {
      * than 0 in any case.
      */
     @Test
-    @Tag("fast")
-    void tpduValueForGivenTooSmallSize() {
-        Executable closureContainingCodeToTest = () -> TpduSize.valueForGivenSize(-1);
+    @Category(FastTests.class)
+    public void tpduValueForGivenTooSmallSize() {
+        assertThatThrownBy(() ->
+            TpduSize.valueForGivenSize(-1))
+            .isInstanceOf(IllegalArgumentException.class);
 
-        assertThrows(IllegalArgumentException.class, closureContainingCodeToTest,
-            "An exception should have been thrown.");
     }
 
     /**
@@ -208,11 +208,11 @@ class IsotpTypeTests {
      * protocol spec, so it is automatically downgraded to the maximum valid value.
      */
     @Test
-    @Tag("fast")
-    void tpduValueForGivenTooGreatSize() {
+    @Category(FastTests.class)
+    public void tpduValueForGivenTooGreatSize() {
         TpduSize tpduSize = TpduSize.valueForGivenSize(10000);
 
-        assertEquals(TpduSize.SIZE_8192, tpduSize, "expected tpdu size of 8192");
+        assertThat(tpduSize).isEqualTo(TpduSize.SIZE_8192);
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/netty/events/S7StateTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/netty/events/S7StateTests.java
index 2a9a59d..a798cf2 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/netty/events/S7StateTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/netty/events/S7StateTests.java
@@ -19,27 +19,28 @@ under the License.
 
 package org.apache.plc4x.java.netty.events;
 
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import static org.assertj.core.api.Assertions.assertThat;
 
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-class S7StateTests {
+public class S7StateTests {
 
     @Test
-    @Tag("fast")
-    void testInitialS7ConnectionEvent() {
+    @Category(FastTests.class)
+    public void testInitialS7ConnectionEvent() {
         S7ConnectionEvent s7event = new S7ConnectionEvent();
 
-        assertTrue(s7event.getState() == S7ConnectionState.INITIAL, "Initial state not initial");
+        assertThat(s7event.getState()).isEqualTo(S7ConnectionState.INITIAL);
     }
 
     @Test
-    @Tag("fast")
-    void testS7ConnectionEvent() {
+    @Category(FastTests.class)
+    public void testS7ConnectionEvent() {
         S7ConnectionEvent s7event = new S7ConnectionEvent(S7ConnectionState.SETUP_COMPLETE);
 
-        assertTrue(s7event.getState() == S7ConnectionState.SETUP_COMPLETE, "State not correct");
+        assertThat(s7event.getState()).isEqualTo(S7ConnectionState.SETUP_COMPLETE);
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
index 3eab098..bc8b56b 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
@@ -18,28 +18,30 @@ under the License.
 */
 package org.apache.plc4x.java.s7;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.s7.connection.S7PlcConnection;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 public class S7PlcDriverTest {
 
-    @Disabled("We first have to find/build some tool to help test these connections.")
+    @Ignore("We first have to find/build some tool to help test these connections.")
     @Test
-    @Tag("fast")
-    void getConnection() throws PlcException {
+    @Category(FastTests.class)
+    public void getConnection() throws PlcException {
         S7PlcConnection s7Connection = (S7PlcConnection)
             new PlcDriverManager().getConnection("s7://localhost/1/2");
-        Assertions.assertEquals(s7Connection.getHostName(), "localhost");
-        Assertions.assertEquals(s7Connection.getRack(), 1);
-        Assertions.assertEquals(s7Connection.getSlot(), 2);
+        assertThat(s7Connection.getHostName()).isEqualTo("localhost");
+        assertThat(s7Connection.getRack()).isEqualTo(1);
+        assertThat(s7Connection.getSlot()).isEqualTo(2);
     }
 
     /**
@@ -48,10 +50,11 @@ public class S7PlcDriverTest {
      * @throws PlcException something went wrong
      */
     @Test
-    @Tag("fast")
-    void getConnectionInvalidUrl() throws PlcException {
-        Assertions.assertThrows(PlcConnectionException.class,
-            () -> new PlcDriverManager().getConnection("s7://localhost/hurz/2"));
+    @Category(FastTests.class)
+    public void getConnectionInvalidUrl() throws PlcException {
+        assertThatThrownBy(() ->
+            new PlcDriverManager().getConnection("s7://localhost/hurz/2"))
+            .isInstanceOf(PlcConnectionException.class);
     }
 
     /**
@@ -61,11 +64,12 @@ public class S7PlcDriverTest {
      * @throws PlcException something went wrong
      */
     @Test
-    @Tag("fast")
-    void getConnectionWithAuthentication() throws PlcException {
-        Assertions.assertThrows(PlcConnectionException.class,
-            () -> new PlcDriverManager().getConnection("s7://localhost/1/2",
-                new PlcUsernamePasswordAuthentication("user", "pass")));
+    @Category(FastTests.class)
+    public void getConnectionWithAuthentication() throws PlcException {
+        assertThatThrownBy(() ->
+            new PlcDriverManager().getConnection("s7://localhost/1/2",
+                new PlcUsernamePasswordAuthentication("user", "pass")))
+            .isInstanceOf(PlcConnectionException.class);
     }
 
 }
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
index 3d8c100..c6cc76d 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
@@ -19,57 +19,58 @@ under the License.
 
 package org.apache.plc4x.java.s7.connection;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
+
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.s7.model.S7Address;
 import org.apache.plc4x.java.s7.model.S7BitAddress;
 import org.apache.plc4x.java.s7.model.S7DataBlockAddress;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
-class S7PlcConnectionTests {
+public class S7PlcConnectionTests {
 
     private S7PlcConnection  s7PlcConnection;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         s7PlcConnection = new S7PlcConnection("localhost", 1, 2, "");
     }
 
-    @AfterEach
-    void tearDown() {
+    @After
+    public void tearDown() {
         s7PlcConnection = null;
     }
 
     @Test
-    void initialState() {
-        assertTrue(s7PlcConnection.getHostName().equalsIgnoreCase("localhost"), "Hostname is incorrect");
-        assertTrue(s7PlcConnection.getRack() == 1, "Rack is incorrect");
-        assertTrue(s7PlcConnection.getSlot() == 2, "Slot is incorrect");
-        assertTrue(s7PlcConnection.getParamPduSize() == 1024, "Pdu size is incorrect");
-        assertTrue(s7PlcConnection.getParamMaxAmqCaller() == 8, "Max AMQ Caller size is incorrect");
-        assertTrue(s7PlcConnection.getParamMaxAmqCallee() == 8, "Max AMQ Callee size is incorrect");
+    public void initialState() {
+        assertThat(s7PlcConnection.getHostName()).isEqualToIgnoringCase("localhost").withFailMessage("Hostname is incorrect");
+        assertThat(s7PlcConnection.getRack()).isEqualTo(1).withFailMessage("Rack is incorrect");
+        assertThat(s7PlcConnection.getSlot()).isEqualTo(2).withFailMessage("Slot is incorrect");
+        assertThat(s7PlcConnection.getParamPduSize()).isEqualTo(1024).withFailMessage("Pdu size is incorrect");
+        assertThat(s7PlcConnection.getParamMaxAmqCaller()).isEqualTo(8).withFailMessage("Max AMQ Caller size is incorrect");
+        assertThat(s7PlcConnection.getParamMaxAmqCallee()).isEqualTo(8).withFailMessage("Max AMQ Callee size is incorrect");
     }
 
     @Test
-    void emptyParseAddress() {
+    public void emptyParseAddress() {
         try {
             s7PlcConnection.parseAddress("");
         }
         catch (PlcException exception) {
-            assertTrue(exception.getMessage().startsWith("Address string doesn't match"), "Unexpected exception");
+            assertThat(exception.getMessage()).startsWith("Address string doesn't match");
         }
     }
 
     @Test
-    void parseDatablockAddress() {
+    public void parseDatablockAddress() {
         try {
             S7DataBlockAddress address = (S7DataBlockAddress) s7PlcConnection.parseAddress("DATA_BLOCKS/20/100");
-            assertTrue(address.getDataBlockNumber() == 20, "unexpected data block");
-            assertTrue(address.getByteOffset() == 100, "unexpected byte offset");
+            assertThat(address.getDataBlockNumber()).isEqualTo((short) 20).withFailMessage("unexpected data block");
+            assertThat(address.getByteOffset()).isEqualTo((short) 100).withFailMessage("unexpected byte offset");
         }
         catch (PlcException exception) {
             fail("valid data block address");
@@ -77,11 +78,11 @@ class S7PlcConnectionTests {
     }
 
     @Test
-    void parseAddressAddress() {
+    public void parseAddressAddress() {
         try {
             S7Address address = (S7Address) s7PlcConnection.parseAddress("TIMERS/10");
-            assertTrue(address.getMemoryArea() == MemoryArea.TIMERS, "unexpected memory area");
-            assertTrue(address.getByteOffset() == 10, "unexpected byte offset");
+            assertThat(address.getMemoryArea()).isEqualTo(MemoryArea.TIMERS).withFailMessage("unexpected memory area");
+            assertThat(address.getByteOffset()).isEqualTo((short) 10).withFailMessage("unexpected byte offset");
         }
         catch (PlcException exception) {
             fail("valid timer block address");
@@ -89,12 +90,12 @@ class S7PlcConnectionTests {
     }
 
     @Test
-    void parseAddressBitAddress() {
+    public void parseAddressBitAddress() {
         try {
             S7BitAddress address = (S7BitAddress) s7PlcConnection.parseAddress("TIMERS/10/4");
-            assertTrue(address.getMemoryArea() == MemoryArea.TIMERS, "unexpected memory area");
-            assertTrue(address.getByteOffset() == 10, "unexpected byte offset");
-            assertTrue(address.getBitOffset() == 4, "unexpected but offset");
+            assertThat(address.getMemoryArea()).isEqualTo(MemoryArea.TIMERS).withFailMessage("unexpected memory area");
+            assertThat(address.getByteOffset()).isEqualTo((short) 10).withFailMessage("unexpected byte offset");
+            assertThat(address.getBitOffset()).isEqualTo((byte) 4).withFailMessage("unexpected but offset");
         }
         catch (PlcException exception) {
             fail("valid timer block bit address");
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7AddressTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7AddressTests.java
index 1a465ed..87291c2 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7AddressTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7AddressTests.java
@@ -19,43 +19,44 @@ under the License.
 
 package org.apache.plc4x.java.s7.model;
 
-import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import static org.assertj.core.api.Assertions.assertThat;
 
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-class S7AddressTests {
+public class S7AddressTests {
 
     @Test
-    @Tag("fast")
-    void testS7Address() {
+    @Category(FastTests.class)
+    public void testS7Address() {
         MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
         S7Address s7Address = new S7Address(memoryArea, (short) 0x100);
 
-        assertTrue(s7Address.getMemoryArea() == MemoryArea.DATA_BLOCKS, "Wrong memory area");
-        assertTrue( s7Address.getByteOffset() == 0x100, "Memory area byte offset incorrect");
+        assertThat(s7Address.getMemoryArea()).isEqualTo(MemoryArea.DATA_BLOCKS);
+        assertThat(s7Address.getByteOffset()).isEqualTo((short) 0x100);
     }
 
     @Test
-    @Tag("fast")
-    void testS7BitAddress() {
+    @Category(FastTests.class)
+    public void testS7BitAddress() {
         MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
         S7BitAddress s7Address = new S7BitAddress(memoryArea, (short) 0x50, (byte) 0x4);
 
-        assertTrue(s7Address.getMemoryArea() == MemoryArea.DATA_BLOCKS, "Wrong memory area");
-        assertTrue( s7Address.getByteOffset() == 0x50, "Memory area byte offset incorrect");
-        assertTrue( s7Address.getBitOffset() == 0x4, "Memory area bit offset incorrect");
+        assertThat(s7Address.getMemoryArea()).isEqualTo(MemoryArea.DATA_BLOCKS);
+        assertThat(s7Address.getByteOffset()).isEqualTo((short) 0x50);
+        assertThat(s7Address.getBitOffset()).isEqualTo((byte) 0x4);
     }
 
     @Test
-    @Tag("fast")
-    void testS7DatBlockAddress() {
+    @Category(FastTests.class)
+    public void testS7DatBlockAddress() {
         S7DataBlockAddress s7Address = new S7DataBlockAddress((short) 1, (short) 0x50);
 
-        assertTrue(s7Address.getMemoryArea() == MemoryArea.DATA_BLOCKS, "Wrong memory area");
-        assertTrue(s7Address.getDataBlockNumber() == 1, "Memory block number incorrect");
-        assertTrue( s7Address.getByteOffset() == 0x50, "Memory area byte offset incorrect");
+        assertThat(s7Address.getMemoryArea()).isEqualTo(MemoryArea.DATA_BLOCKS);
+        assertThat(s7Address.getDataBlockNumber()).isEqualTo((short) 1);
+        assertThat(s7Address.getByteOffset()).isEqualTo((short) 0x50);
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
index 8cf388b..2a40eb5 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
@@ -33,35 +33,66 @@ import org.apache.plc4x.java.s7.netty.model.types.DataTransportErrorCode;
 import org.apache.plc4x.java.s7.netty.model.types.DataTransportSize;
 import org.apache.plc4x.java.s7.netty.model.types.MessageType;
 import org.apache.plc4x.java.s7.netty.model.types.ParameterType;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 import java.lang.reflect.Field;
 import java.util.*;
 import java.util.function.Consumer;
-import java.util.stream.Stream;
 
 import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.*;
 
 @SuppressWarnings("unchecked")
+@RunWith(Parameterized.class)
 public class Plc4XS7ProtocolTest extends NettyTestBase {
 
+    private Class<?> type;
+    private S7Address address;
+
     private Plc4XS7Protocol SUT;
 
-    @BeforeEach
-    void setUp() {
+    @Parameterized.Parameters
+    public static Collection<Object[]> data() {
+        List<Object[]> arguments = new LinkedList<>();
+        // Build the cross product of all variables and address types.
+        Arrays.asList(
+            Boolean.class,
+            Byte.class,
+            Short.class,
+            // TODO: enable once Calender in implemented
+            //Calendar.class,
+            Float.class,
+            Integer.class,
+            String.class)
+            .forEach(
+                aClass -> Arrays.asList(
+                    mock(S7Address.class),
+                    mock(S7BitAddress.class),
+                    mock(S7DataBlockAddress.class))
+                    .forEach(s7Address -> arguments.add(new Object[]{aClass, s7Address}))
+            );
+        return arguments;
+    }
+
+    public Plc4XS7ProtocolTest(Class<?> type, S7Address address) {
+        this.type = type;
+        this.address = address;
+    }
+
+    @Before
+    public void setUp() {
         SUT = new Plc4XS7Protocol();
     }
 
-    @ParameterizedTest
-    @MethodSource("typeAndAddressProvider")
-    @Tag("fast")
-    public void encode(Class<?> type, S7Address address) throws Exception {
+    @Test
+    @Category(FastTests.class)
+    public void encode() throws Exception {
         // TODO: finish me
         // Read Request Tests
         {
@@ -79,10 +110,9 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
         }
     }
 
-    @ParameterizedTest
-    @MethodSource("typeAndAddressProvider")
-    @Tag("fast")
-    public void decode(Class<?> type, S7Address address) throws Exception {
+    @Test
+    @Category(FastTests.class)
+    public void decode() throws Exception {
         // Read Test
         {
             short fakeTpduReference = (short) 1;
@@ -129,27 +159,6 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
         }
     }
 
-    private static Stream<Arguments> typeAndAddressProvider() {
-        List<Arguments> arguments = new LinkedList<>();
-        Arrays.asList(
-            Boolean.class,
-            Byte.class,
-            Short.class,
-            // TODO: enable once Calender in implemented
-            //Calendar.class,
-            Float.class,
-            Integer.class,
-            String.class)
-            .forEach(
-                aClass -> Arrays.asList(
-                    mock(S7Address.class),
-                    mock(S7BitAddress.class),
-                    mock(S7DataBlockAddress.class))
-                    .forEach(s7Address -> arguments.add(Arguments.of(aClass, s7Address)))
-            );
-        return arguments.stream();
-    }
-
     private <T> T fakeValueFor(Class<T> type) {
         if (type == Boolean.class) {
             return (T) Boolean.TRUE;
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java
index 13b3b4c..8bcddcc 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java
@@ -29,9 +29,10 @@ import org.apache.plc4x.java.s7.netty.model.params.items.S7AnyVarParameterItem;
 import org.apache.plc4x.java.s7.netty.model.payloads.VarPayload;
 import org.apache.plc4x.java.s7.netty.model.payloads.items.VarPayloadItem;
 import org.apache.plc4x.java.s7.netty.model.types.*;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.LinkedList;
 
@@ -43,13 +44,13 @@ public class S7ProtocolTest extends NettyTestBase {
 
     private S7Protocol SUT;
 
-    @BeforeEach
-    void setUp() {
+    @Before
+    public void setUp() {
         SUT = new S7Protocol((short) 1, (short) 1, (short) 1);
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void encode() throws Exception {
         //TODO: finish me
         LinkedList<Object> out = new LinkedList<>();
@@ -70,7 +71,7 @@ public class S7ProtocolTest extends NettyTestBase {
     }
 
     @Test
-    @Tag("fast")
+    @Category(FastTests.class)
     public void decode() throws Exception {
         //TODO: finish me
         LinkedList<Object> out = new LinkedList<>();
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/messages/S7MessageTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/messages/S7MessageTests.java
index 0959354..a395f00 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/messages/S7MessageTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/messages/S7MessageTests.java
@@ -19,6 +19,8 @@ under the License.
 
 package org.apache.plc4x.java.s7.netty.model.messages;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.s7.netty.model.params.CpuServicesParameter;
 import org.apache.plc4x.java.s7.netty.model.params.S7Parameter;
 import org.apache.plc4x.java.s7.netty.model.params.VarParameter;
@@ -28,18 +30,17 @@ import org.apache.plc4x.java.s7.netty.model.payloads.S7Payload;
 import org.apache.plc4x.java.s7.netty.model.payloads.VarPayload;
 import org.apache.plc4x.java.s7.netty.model.payloads.items.VarPayloadItem;
 import org.apache.plc4x.java.s7.netty.model.types.*;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.ArrayList;
 
-import static org.junit.jupiter.api.Assertions.*;
-
-class S7MessageTests {
+public class S7MessageTests {
 
     @Test
-    @Tag("fast")
-    void setupCommunictionsRequestMessage() {
+    @Category(FastTests.class)
+    public void setupCommunictionsRequestMessage() {
         short tpduReference = 1;
         short maxAmqCaller = 4;
         short maxAmqCallee = 8;
@@ -47,13 +48,13 @@ class S7MessageTests {
 
         SetupCommunicationRequestMessage setupMessage = new SetupCommunicationRequestMessage(tpduReference, maxAmqCaller, maxAmqCallee, pduLength);
 
-        assertTrue(setupMessage.getTpduReference() == tpduReference, "Unexpected tpdu value");
-        assertTrue(setupMessage.getMessageType() == MessageType.JOB, "Unexpected message type");
+        assertThat(setupMessage.getTpduReference()).isEqualTo(tpduReference).withFailMessage("Unexpected tpdu value");
+        assertThat(setupMessage.getMessageType()).isEqualTo(MessageType.JOB).withFailMessage("Unexpected message type");
     }
 
     @Test
-    @Tag("fast")
-    void s7RequestMessage() {
+    @Category(FastTests.class)
+    public void s7RequestMessage() {
         MessageType messageType = MessageType.USER_DATA;
         short tpduReference = 1;
         ArrayList<S7Parameter> s7Parameters = null;
@@ -61,15 +62,15 @@ class S7MessageTests {
 
         S7RequestMessage message = new S7RequestMessage(messageType, tpduReference, s7Parameters, s7Payloads);
 
-        assertTrue(message.getTpduReference() == tpduReference, "Unexpected tpdu value");
-        assertTrue(message.getMessageType() == MessageType.USER_DATA, "Unexpected message type");
-        assertTrue(message.getPayloads() == null, "Unexpected payloads");
-        assertTrue(message.getParameters() == null, "Unexpected parameters");
+        assertThat(message.getTpduReference()).isEqualTo(tpduReference).withFailMessage("Unexpected tpdu value");
+        assertThat(message.getMessageType()).isEqualTo(MessageType.USER_DATA).withFailMessage("Unexpected message type");
+        assertThat(message.getPayloads()).isNull();
+        assertThat(message.getParameters()).isNull();
     }
 
     @Test
-    @Tag("fast")
-    void s7ResponseMessage() {
+    @Category(FastTests.class)
+    public void s7ResponseMessage() {
         MessageType messageType = MessageType.USER_DATA;
         short tpduReference = 1;
         ArrayList<S7Parameter> s7Parameters = null;
@@ -79,17 +80,17 @@ class S7MessageTests {
 
         S7ResponseMessage message = new S7ResponseMessage(messageType, tpduReference, s7Parameters, s7Payloads, errorClass, errorCode);
 
-        assertTrue(message.getTpduReference() == tpduReference, "Unexpected tpdu value");
-        assertTrue(message.getMessageType() == MessageType.USER_DATA, "Unexpected message type");
-        assertTrue(message.getErrorClass() == 0x1, "Unexpected error class");
-        assertTrue(message.getErrorCode() == 0x23, "Unexpected error code");
-        assertTrue(message.getPayloads() == null, "Unexpected payloads");
-        assertTrue(message.getParameters() == null, "Unexpected parameters");
+        assertThat(message.getTpduReference()).isEqualTo(tpduReference).withFailMessage("Unexpected tpdu value");
+        assertThat(message.getMessageType()).isEqualTo(MessageType.USER_DATA).withFailMessage("Unexpected message type");
+        assertThat(message.getErrorClass()).isEqualTo((byte) 0x1).withFailMessage("Unexpected error class");
+        assertThat(message.getErrorCode()).isEqualTo((byte) 0x23).withFailMessage("Unexpected error code");
+        assertThat(message.getPayloads()).isNull();
+        assertThat(message.getParameters()).isNull();
     }
 
     @Test
-    @Tag("fast")
-    void s7MessageParameters() {
+    @Category(FastTests.class)
+    public void s7MessageParameters() {
         MessageType messageType = MessageType.USER_DATA;
         short tpduReference = 1;
         ArrayList<S7Parameter> s7Parameters = new ArrayList<>();
@@ -112,18 +113,18 @@ class S7MessageTests {
 
         S7RequestMessage message = new S7RequestMessage(messageType, tpduReference, s7Parameters, s7Payloads);
 
-        assertTrue(message.getTpduReference() == tpduReference, "Unexpected tpdu value");
-        assertTrue(message.getMessageType() == MessageType.USER_DATA, "Unexpected message type");
-        assertTrue(message.getParameters().size() == 1, "Unexpected number of parameters");
-        assertTrue(message.getParameters().containsAll(s7Parameters), "Unexpected parameters");
-        assertTrue(message.getParameter(VarParameter.class).get().equals(varParameter), "Parameter missing");
-        assertTrue(!message.getParameter(CpuServicesParameter.class).isPresent(), "Contains unexpected parameter");
-        assertTrue(message.getPayloads().size() == 0, "Unexpected number of payloads");
+        assertThat(message.getTpduReference()).isEqualTo(tpduReference).withFailMessage("Unexpected tpdu value");
+        assertThat(message.getMessageType()).isEqualTo(MessageType.USER_DATA).withFailMessage("Unexpected message type");
+        assertThat(message.getParameters()).hasSize(1).withFailMessage("Unexpected number of parameters");
+        assertThat(message.getParameters()).containsAll(s7Parameters).withFailMessage("Unexpected parameters");
+        assertThat(message.getParameter(VarParameter.class).get()).isEqualTo(varParameter).withFailMessage("Parameter missing");
+        assertThat(message.getParameter(CpuServicesParameter.class).isPresent()).isFalse().withFailMessage("Contains unexpected parameter");
+        assertThat(message.getPayloads()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
-    void s7MessagePayload() {
+    @Category(FastTests.class)
+    public void s7MessagePayload() {
         MessageType messageType = MessageType.USER_DATA;
         short tpduReference = 1;
         ArrayList<S7Parameter> s7Parameters = new ArrayList<>();
@@ -139,18 +140,18 @@ class S7MessageTests {
 
         S7RequestMessage message = new S7RequestMessage(messageType, tpduReference, s7Parameters, s7Payloads);
 
-        assertTrue(message.getTpduReference() == tpduReference, "Unexpected tpdu value");
-        assertTrue(message.getMessageType() == MessageType.USER_DATA, "Unexpected message type");
-        assertTrue(message.getPayloads().size() == 1, "Unexpected number of payloads");
-        assertTrue(message.getPayloads().containsAll(s7Payloads), "Unexpected payloads");
-        assertTrue(message.getPayload(VarPayload.class).get().equals(varPayload), "Payload missing");
-        assertTrue(!message.getPayload(VarParameter.class).isPresent(), "Contains unexpected payload"); // No other parameter classes
-        assertTrue(message.getParameters().size() == 0, "Unexpected number of parameters");
+        assertThat(message.getTpduReference()).isEqualTo(tpduReference).withFailMessage("Unexpected tpdu value");
+        assertThat(message.getMessageType()).isEqualTo(MessageType.USER_DATA).withFailMessage("Unexpected message type");
+        assertThat(message.getPayloads()).hasSize(1).withFailMessage("Unexpected number of payloads");
+        assertThat(message.getPayloads()).containsAll(s7Payloads).withFailMessage("Unexpected payloads");
+        assertThat(message.getPayload(VarPayload.class).get()).isEqualTo(varPayload).withFailMessage("Payload missing");
+        assertThat(message.getPayload(VarParameter.class).isPresent()).isFalse().withFailMessage("Contains unexpected payload"); // No other parameter classes
+        assertThat(message.getParameters()).isEmpty();
     }
 
     @Test
-    @Tag("fast")
-    void s7AnyVarParameterItem() {
+    @Category(FastTests.class)
+    public void s7AnyVarParameterItem() {
         MessageType messageType = MessageType.USER_DATA;
         short tpduReference = 1;
         ArrayList<S7Parameter> s7Parameters = new ArrayList<>();
@@ -167,14 +168,14 @@ class S7MessageTests {
 
         S7AnyVarParameterItem parameterItem = new S7AnyVarParameterItem(specificationType, memoryArea, transportSize, numElements, dataBlock, byteOffset, bitOffset);
 
-        assertTrue(parameterItem.getSpecificationType() == specificationType, "Unexpected specification type");
-        assertTrue(parameterItem.getMemoryArea() == MemoryArea.DATA_BLOCKS, "Unexpected memory area");
-        assertTrue(parameterItem.getTransportSize() == transportSize, "Unexpected transport size");
-        assertTrue(parameterItem.getNumElements() == numElements, "Unexpected number elements");
-        assertTrue(parameterItem.getDataBlockNumber() == dataBlock, "Unexpected data block");
-        assertTrue(parameterItem.getByteOffset() == byteOffset, "Unexpected byte offset");
-        assertTrue(parameterItem.getBitOffset() == bitOffset, "Unexpected bit offset");
-        assertTrue(parameterItem.getAddressingMode() == VariableAddressingMode.S7ANY, "Unexpected adressing mode");
+        assertThat(parameterItem.getSpecificationType()).isEqualTo(specificationType).withFailMessage("Unexpected specification type");
+        assertThat(parameterItem.getMemoryArea()).isEqualTo(MemoryArea.DATA_BLOCKS).withFailMessage("Unexpected memory area");
+        assertThat(parameterItem.getTransportSize()).isEqualTo(transportSize).withFailMessage("Unexpected transport size");
+        assertThat(parameterItem.getNumElements()).isEqualTo(numElements).withFailMessage("Unexpected number elements");
+        assertThat(parameterItem.getDataBlockNumber()).isEqualTo(dataBlock).withFailMessage("Unexpected data block");
+        assertThat(parameterItem.getByteOffset()).isEqualTo(byteOffset).withFailMessage("Unexpected byte offset");
+        assertThat(parameterItem.getBitOffset()).isEqualTo(bitOffset).withFailMessage("Unexpected bit offset");
+        assertThat(parameterItem.getAddressingMode()).isEqualTo(VariableAddressingMode.S7ANY).withFailMessage("Unexpected adressing mode");
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java
index ca4bb47..1e1b78d 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java
@@ -19,24 +19,25 @@ under the License.
 
 package org.apache.plc4x.java.s7.netty.model.params;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.s7.netty.model.params.items.S7AnyVarParameterItem;
 import org.apache.plc4x.java.s7.netty.model.params.items.VarParameterItem;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 import org.apache.plc4x.java.s7.netty.model.types.ParameterType;
 import org.apache.plc4x.java.s7.netty.model.types.SpecificationType;
 import org.apache.plc4x.java.s7.netty.model.types.TransportSize;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.ArrayList;
 
-import static org.junit.jupiter.api.Assertions.*;
-
-class S7ParameterTests {
+public class S7ParameterTests {
 
     @Test
-    @Tag("fast")
-    void varParameter() {
+    @Category(FastTests.class)
+    public void varParameter() {
         ParameterType parameterType = ParameterType.READ_VAR;
         ArrayList<VarParameterItem> parameterItems = new ArrayList<>();
         SpecificationType specificationType = SpecificationType.VARIABLE_SPECIFICATION;
@@ -50,31 +51,29 @@ class S7ParameterTests {
         parameterItems.add(new S7AnyVarParameterItem(specificationType, memoryArea, transportSize, numElements, dataBlock, byteOffset, bitOffset));
 
         VarParameter varParameter = new VarParameter(parameterType, parameterItems);
-        assertTrue(varParameter.getType() == ParameterType.READ_VAR, "Unexpected parameter type");
-        assertTrue(varParameter.getItems().containsAll(parameterItems), "Unexpected paramater items");
+        assertThat(varParameter.getType()).isEqualTo(ParameterType.READ_VAR).withFailMessage("Unexpected parameter type");
+        assertThat(varParameter.getItems()).containsAll(parameterItems).withFailMessage("Unexpected paramater items");
     }
 
     @Test
-    @Tag("fast")
-    void cpuServicesParameter() {
+    @Category(FastTests.class)
+    public void cpuServicesParameter() {
         CpuServicesParameter cpuParameter = new CpuServicesParameter();
-        assertTrue(cpuParameter.getType() == ParameterType.CPU_SERVICES, "Unexpected parameter type");
+        assertThat(cpuParameter.getType()).isEqualTo(ParameterType.CPU_SERVICES).withFailMessage("Unexpected parameter type");
     }
     
     @Test
-    @Tag("fast")
-    void setupCommunicationsParameter() {
+    @Category(FastTests.class)
+    public void setupCommunicationsParameter() {
         short maxAmqCaller = 4;
         short maxAmqCallee = 8;
         short pduLength = 512;
 
         SetupCommunicationParameter setupParameter = new SetupCommunicationParameter(maxAmqCaller, maxAmqCallee, pduLength);
-        assertTrue(setupParameter.getType() == ParameterType.SETUP_COMMUNICATION, "Unexpected parameter type");
-        assertTrue(setupParameter.getMaxAmqCallee() == maxAmqCallee, "Unexpected value for maxAmqCallee");
-        assertTrue(setupParameter.getMaxAmqCaller() == maxAmqCaller, "Unexpected value for maxAmqCaller");
-        assertTrue(setupParameter.getPduLength() == pduLength, "Unexpected value for pduLength");
+        assertThat(setupParameter.getType()).isEqualTo(ParameterType.SETUP_COMMUNICATION).withFailMessage("Unexpected parameter type");
+        assertThat(setupParameter.getMaxAmqCallee()).isEqualTo(maxAmqCallee).withFailMessage("Unexpected value for maxAmqCallee");
+        assertThat(setupParameter.getMaxAmqCaller()).isEqualTo(maxAmqCaller).withFailMessage("Unexpected value for maxAmqCaller");
+        assertThat(setupParameter.getPduLength()).isEqualTo(pduLength).withFailMessage("Unexpected value for pduLength");
     }
 
-
-
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java
index 3c8af0d..c62583d 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java
@@ -19,35 +19,36 @@ under the License.
 
 package org.apache.plc4x.java.s7.netty.model.payloads;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.plc4x.java.s7.netty.model.payloads.items.VarPayloadItem;
 import org.apache.plc4x.java.s7.netty.model.types.DataTransportErrorCode;
 import org.apache.plc4x.java.s7.netty.model.types.DataTransportSize;
 import org.apache.plc4x.java.s7.netty.model.types.ParameterType;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.ArrayList;
 
-import static org.junit.jupiter.api.Assertions.*;
-
-class S7PayloadTests {
+public class S7PayloadTests {
 
     @Test
-    @Tag("fast")
-    void varPayloadItem() {
+    @Category(FastTests.class)
+    public void varPayloadItem() {
         DataTransportErrorCode returnCode = DataTransportErrorCode.NOT_FOUND;
         DataTransportSize dataTransportSize = DataTransportSize.INTEGER;
         byte[] data = {(byte)0xFF};
 
         VarPayloadItem  varPayloadItem = new VarPayloadItem(returnCode, dataTransportSize, data);
-        assertTrue(varPayloadItem.getReturnCode() == DataTransportErrorCode.NOT_FOUND, "Unexpected data transport error code");
-        assertTrue(varPayloadItem.getDataTransportSize() == DataTransportSize.INTEGER, "Unexpected data transport size");
-        assertTrue(varPayloadItem.getData()[0] == (byte) 0xFF, "Unexpected user data");
+        assertThat(varPayloadItem.getReturnCode()).isEqualTo(DataTransportErrorCode.NOT_FOUND).withFailMessage("Unexpected data transport error code");
+        assertThat(varPayloadItem.getDataTransportSize()).isEqualTo(DataTransportSize.INTEGER).withFailMessage("Unexpected data transport size");
+        assertThat(varPayloadItem.getData()[0]).isEqualTo((byte) 0xFF).withFailMessage("Unexpected user data");
     }
 
     @Test
-    @Tag("fast")
-    void varPayload() {
+    @Category(FastTests.class)
+    public void varPayload() {
         ParameterType parameterType = ParameterType.DOWNLOAD_ENDED;
         ArrayList<VarPayloadItem> payloadItems = new ArrayList<>();
         byte[] data = {(byte)0xFF};
@@ -55,8 +56,8 @@ class S7PayloadTests {
         payloadItems.add(new VarPayloadItem(DataTransportErrorCode.OK, DataTransportSize.BIT, data));
 
         VarPayload  varPayload = new VarPayload(parameterType, payloadItems);
-        assertTrue(varPayload.getType() == ParameterType.DOWNLOAD_ENDED, "Unexpected parameter type");
-        assertTrue(varPayload.getPayloadItems().containsAll(payloadItems) , "Unexpected pay load items");
+        assertThat(varPayload.getType()).isEqualTo(ParameterType.DOWNLOAD_ENDED).withFailMessage("Unexpected parameter type");
+        assertThat(varPayload.getPayloadItems()).containsAll(payloadItems).withFailMessage("Unexpected pay load items");
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java
index 5cfca01..ed810f0 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java
@@ -19,119 +19,119 @@ under the License.
 
 package org.apache.plc4x.java.s7.netty.model.types;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
 
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.apache.plc4x.test.FastTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
-class S7TypeTests {
+public class S7TypeTests {
 
     @Test
-    @Tag("fast")
-    void dataTransportErrorCode() {
+    @Category(FastTests.class)
+    public void dataTransportErrorCode() {
         DataTransportErrorCode dataTransportErrorCode = DataTransportErrorCode.INVALID_ADDRESS;
 
-        assertTrue(DataTransportErrorCode.valueOf((byte)5) == DataTransportErrorCode.INVALID_ADDRESS, "5 incorrectly mapped");
-        assertTrue(dataTransportErrorCode.getCode() == (byte)5, "code is not 5");
+        assertThat(DataTransportErrorCode.valueOf((byte)5)).isEqualTo(DataTransportErrorCode.INVALID_ADDRESS).withFailMessage("5 incorrectly mapped");
+        assertThat(dataTransportErrorCode.getCode()).isEqualTo((byte)5).withFailMessage("code is not 5");
     }
 
     @Test
-    @Tag("fast")
-    void unknownDataTransportErrorCode() {
+    @Category(FastTests.class)
+    public void unknownDataTransportErrorCode() {
         DataTransportErrorCode dataTransportErrorCode = DataTransportErrorCode.INVALID_ADDRESS;
 
-        assertTrue(DataTransportErrorCode.valueOf((byte)0xFE) == null, "Unexpected value mapped");
+        assertThat(DataTransportErrorCode.valueOf((byte)0xFE)).isNull();
     }
 
     @Test
-    @Tag("fast")
-    void dataTransportSize() {
+    @Category(FastTests.class)
+    public void dataTransportSize() {
         DataTransportSize dataTransportSize = DataTransportSize.DINTEGER;
 
-        assertTrue(DataTransportSize.valueOf((byte)6) == DataTransportSize.DINTEGER, "6 incorrectly mapped");
-        assertTrue(dataTransportSize.getCode() == (byte)6, "code is not 6");
-        assertTrue(!dataTransportSize.isSizeInBits(), "Unexpected return from bit size");
+        assertThat(DataTransportSize.valueOf((byte)6)).isEqualTo(DataTransportSize.DINTEGER).withFailMessage("6 incorrectly mapped");
+        assertThat(dataTransportSize.getCode()).isEqualTo((byte)6).withFailMessage("code is not 6");
+        assertThat(dataTransportSize.isSizeInBits()).isFalse().withFailMessage("Unexpected return from bit size");
     }
 
     @Test
-    @Tag("fast")
-    void headerErrorClass() {
+    @Category(FastTests.class)
+    public void headerErrorClass() {
         //TODO missing valueOf
     }
 
     @Test
-    @Tag("fast")
-    void messageType() {
+    @Category(FastTests.class)
+    public void messageType() {
         MessageType messageType = MessageType.ACK;
 
-        assertTrue(MessageType.valueOf((byte)2) == MessageType.ACK, "2 incorrectly mapped");
-        assertTrue(messageType.getCode() == (byte)2, "code is not 2");
+        assertThat(MessageType.valueOf((byte)2)).isEqualTo(MessageType.ACK).withFailMessage("2 incorrectly mapped");
+        assertThat(messageType.getCode()).isEqualTo((byte)2).withFailMessage("code is not 2");
     }
 
     @Test
-    @Tag("fast")
-    void parameterError() {
+    @Category(FastTests.class)
+    public void parameterError() {
         //TODO missing value of
     }
 
     @Test
-    @Tag("fast")
-    void parameterType() {
+    @Category(FastTests.class)
+    public void parameterType() {
         ParameterType parameterType = ParameterType.UPLOAD;
 
-        assertTrue(ParameterType.valueOf((byte)0x1E) == ParameterType.UPLOAD, "0x1E incorrectly mapped");
-        assertTrue(parameterType.getCode() == (byte)0x1E, "code is not 0x1E");
+        assertThat(ParameterType.valueOf((byte)0x1E)).isEqualTo(ParameterType.UPLOAD).withFailMessage("0x1E incorrectly mapped");
+        assertThat(parameterType.getCode()).isEqualTo((byte)0x1E).withFailMessage("code is not 0x1E");
     }
 
     @Test
-    @Tag("fast")
-    void unknownParameterType() {
+    @Category(FastTests.class)
+    public void unknownParameterType() {
         ParameterType parameterType = ParameterType.UPLOAD;
 
-        assertTrue(ParameterType.valueOf((byte)0xFF) == null, "Unexpected value mapped");
+        assertThat(ParameterType.valueOf((byte)0xFF)).isNull();;
     }
 
     @Test
-    @Tag("fast")
-    void specificationType() {
+    @Category(FastTests.class)
+    public void specificationType() {
         SpecificationType specificationType = SpecificationType.VARIABLE_SPECIFICATION;
 
-        assertTrue(SpecificationType.valueOf((byte)0x12) == SpecificationType.VARIABLE_SPECIFICATION, "0x12 incorrectly mapped");
-        assertTrue(specificationType.getCode() == (byte)0x12, "code is not 0x12");
+        assertThat(SpecificationType.valueOf((byte)0x12)).isEqualTo(SpecificationType.VARIABLE_SPECIFICATION).withFailMessage("0x12 incorrectly mapped");
+        assertThat(specificationType.getCode()).isEqualTo((byte)0x12).withFailMessage("code is not 0x12");
     }
 
     @Test
-    @Tag("fast")
-    void transportSize() {
+    @Category(FastTests.class)
+    public void transportSize() {
         TransportSize transportSize = TransportSize.TIME;
 
-        assertTrue(TransportSize.valueOf((byte)0x0B) == TransportSize.TIME, "0x0B incorrectly mapped");
-        assertTrue(transportSize.getCode() == (byte)0x0B, "code is not 0x0B");
+        assertThat(TransportSize.valueOf((byte)0x0B)).isEqualTo(TransportSize.TIME).withFailMessage("0x0B incorrectly mapped");
+        assertThat(transportSize.getCode()).isEqualTo((byte)0x0B).withFailMessage("code is not 0x0B");
     }
 
     @Test
-    @Tag("fast")
-    void variableAddressingMode() {
+    @Category(FastTests.class)
+    public void variableAddressingMode() {
         VariableAddressingMode variableAddressingMode = VariableAddressingMode.ALARM_ACK;
 
-        assertTrue(VariableAddressingMode.valueOf((byte)0x19) == VariableAddressingMode.ALARM_ACK, "0x19 incorrectly mapped");
-        assertTrue(variableAddressingMode.getCode() == (byte)0x19, "code is not 0x19");
+        assertThat(VariableAddressingMode.valueOf((byte)0x19)).isEqualTo(VariableAddressingMode.ALARM_ACK).withFailMessage("0x19 incorrectly mapped");
+        assertThat(variableAddressingMode.getCode()).isEqualTo((byte)0x19).withFailMessage("code is not 0x19");
     }
 
     @Test
-    @Tag("fast")
-    void memoryAccess() {
+    @Category(FastTests.class)
+    public void memoryAccess() {
         MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
 
-        assertTrue(MemoryArea.valueOf((byte)0x84) == MemoryArea.DATA_BLOCKS, "0x84 incorrectly mapped");
-        assertTrue(memoryArea.getCode() == (byte)0x84, "code is not 0x84");
+        assertThat(MemoryArea.valueOf((byte)0x84)).isEqualTo(MemoryArea.DATA_BLOCKS).withFailMessage("0x84 incorrectly mapped");
+        assertThat(memoryArea.getCode()).isEqualTo((byte)0x84).withFailMessage("code is not 0x84");
     }
 
     @Test
-    @Tag("fast")
-    void unknownMemoryAccess() {
-        MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
-
-        assertTrue(MemoryArea.valueOf((byte)0xFF) == null, "Unexpected value mapped");
+    @Category(FastTests.class)
+    public void unknownMemoryAccess() {
+        assertThat(MemoryArea.valueOf((byte)0xFF)).isNull();
      }
+
 }
\ No newline at end of file
diff --git a/plc4j/utils/pom.xml b/plc4j/utils/pom.xml
index 09c7fe0..ebc32f4 100644
--- a/plc4j/utils/pom.xml
+++ b/plc4j/utils/pom.xml
@@ -37,6 +37,7 @@
 
   <modules>
     <module>raw-sockets</module>
+    <module>test-utils</module>
     <module>wireshark-utils</module>
   </modules>
 
diff --git a/plc4j/api/pom.xml b/plc4j/utils/test-utils/pom.xml
similarity index 80%
copy from plc4j/api/pom.xml
copy to plc4j/utils/test-utils/pom.xml
index feb7680..20ae861 100644
--- a/plc4j/api/pom.xml
+++ b/plc4j/utils/test-utils/pom.xml
@@ -24,13 +24,15 @@
 
   <parent>
     <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j</artifactId>
+    <artifactId>plc4j-utils</artifactId>
     <version>0.0.1-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-api</artifactId>
-  <name>PLC4J: API</name>
-  <description>Central API Module.</description>
+  <artifactId>plc4j-utils-test-utils</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+
+  <name>PLC4J: Utils: Test Utils</name>
+  <description>A set of test utils. Especially defining the test-categories used to categorize tests.</description>
 
   <dependencies>
   </dependencies>
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/authentication/PlcUsernamePasswordAuthenticationTest.java b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/FastTests.java
similarity index 56%
copy from plc4j/api/src/test/java/org/apache/plc4x/java/api/authentication/PlcUsernamePasswordAuthenticationTest.java
copy to plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/FastTests.java
index fc1c458..6c37401 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/authentication/PlcUsernamePasswordAuthenticationTest.java
+++ b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/FastTests.java
@@ -16,22 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.api.authentication;
+package org.apache.plc4x.test;
 
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-class PlcUsernamePasswordAuthenticationTest {
-
-    @Test
-    @Tag("fast")
-    void authenication() {
-        PlcUsernamePasswordAuthentication authenication = new PlcUsernamePasswordAuthentication("user", "password");
-
-        assertTrue(authenication.getUsername().equals("user"), "Unexpected user name");
-        assertTrue(authenication.getPassword().equals("password"), "Unexpected password");
-    }
-
-}
\ No newline at end of file
+public interface FastTests {
+}
diff --git a/pom.xml b/pom.xml
index 936d3c7..fab3112 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,12 +89,10 @@
     <!-- Exclude all generated code -->
     <sonar.exclusions>file:**/generated-sources/**</sonar.exclusions>
 
-    <junit-platform.version>1.1.0-M1</junit-platform.version>
-    <junit-jupiter.version>5.1.0-M1</junit-jupiter.version>
-
     <assertj.version>3.8.0</assertj.version>
     <commons-io.version>2.6</commons-io.version>
     <commons-lang.version>2.6</commons-lang.version>
+    <junit.version>4.12</junit.version>
     <logback.version>1.2.3</logback.version>
     <gson.version>2.8.0</gson.version>
     <netty.version>4.1.17.Final</netty.version>
@@ -167,6 +165,11 @@
         <version>${netty.version}</version>
       </dependency>
       <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>${junit.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
         <version>${mockito.version}</version>
@@ -894,40 +897,8 @@
         </dependency>
 
         <dependency>
-          <groupId>org.junit.jupiter</groupId>
-          <artifactId>junit-jupiter-api</artifactId>
-          <version>${junit-jupiter.version}</version>
-          <scope>test</scope>
-        </dependency>
-        <dependency>
-          <groupId>org.junit.jupiter</groupId>
-          <artifactId>junit-jupiter-engine</artifactId>
-          <version>${junit-jupiter.version}</version>
-          <scope>test</scope>
-        </dependency>
-        <dependency>
-          <groupId>org.junit.vintage</groupId>
-          <artifactId>junit-vintage-engine</artifactId>
-          <version>${junit-jupiter.version}</version>
-          <scope>test</scope>
-        </dependency>
-        <dependency>
-          <groupId>org.junit.platform</groupId>
-          <artifactId>junit-platform-launcher</artifactId>
-          <version>${junit-platform.version}</version>
-          <scope>test</scope>
-        </dependency>
-        <dependency>
-          <groupId>org.junit.platform</groupId>
-          <artifactId>junit-platform-runner</artifactId>
-          <version>${junit-platform.version}</version>
-          <scope>test</scope>
-        </dependency>
-
-        <dependency>
-          <groupId>org.junit.jupiter</groupId>
-          <artifactId>junit-jupiter-params</artifactId>
-          <version>${junit-jupiter.version}</version>
+          <groupId>junit</groupId>
+          <artifactId>junit</artifactId>
           <scope>test</scope>
         </dependency>
 
@@ -972,7 +943,7 @@
                   <failOnWarning>true</failOnWarning>
                   <ignoredDependencies>
                     <ignoredDependency>org.assertj:assertj-core</ignoredDependency>
-                    <ignoredDependency>org.junit.*:*</ignoredDependency>
+                    <ignoredDependency>junit:junit</ignoredDependency>
                     <ignoredDependency>org.mockito:mockito-core</ignoredDependency>
                     <ignoredDependency>org.slf4j:slf4j-api</ignoredDependency>
                     <ignoredDependency>ch.qos.logback:logback-classic</ignoredDependency>
@@ -1069,8 +1040,6 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
-            <!-- Downgraded surefire as without this no Junit5 test is run -->
-            <version>2.19.1</version>
             <configuration>
               <!--
                 We have to slightly increase the heap-size or some tests will fail.
@@ -1078,18 +1047,6 @@
               -->
               <argLine>-Xmx256m @{surefireArgLine}</argLine>
             </configuration>
-            <dependencies>
-              <dependency>
-                <groupId>org.junit.platform</groupId>
-                <artifactId>junit-platform-surefire-provider</artifactId>
-                <version>${junit-platform.version}</version>
-              </dependency>
-              <dependency>
-                <groupId>org.junit.jupiter</groupId>
-                <artifactId>junit-jupiter-engine</artifactId>
-                <version>${junit-jupiter.version}</version>
-              </dependency>
-            </dependencies>
           </plugin>
 
           <!--
@@ -1098,8 +1055,6 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-failsafe-plugin</artifactId>
-            <!-- Downgraded failsafe as without this no Junit5 test is run -->
-            <version>2.19.1</version>
             <executions>
               <execution>
                 <goals>

-- 
To stop receiving notification emails like this one, please contact
cdutz@apache.org.