You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2020/08/29 23:13:57 UTC

[logging-log4j2] 01/02: [LOG4J2-2653] Migrate filter and impl tests to JUnit 5

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

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 08b35a2fdc0f6d4ea77ef1fa15ed2c250a034136
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sat Aug 29 17:58:58 2020 -0500

    [LOG4J2-2653] Migrate filter and impl tests to JUnit 5
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 .../log4j/core/filter/AbstractFilterTest.java      |   4 +-
 .../log4j/core/filter/AbstractFilterableTest.java  |  14 +-
 .../core/filter/AbstractScriptFilterTest.java      |  38 ++--
 .../log4j/core/filter/BurstFilterLogDelayTest.java |   8 +-
 .../logging/log4j/core/filter/BurstFilterTest.java |  56 +++---
 .../core/filter/DynamicThresholdFilterTest.java    |  66 +++----
 .../log4j/core/filter/LevelRangeFilterTest.java    |   7 +-
 .../logging/log4j/core/filter/MapFilterTest.java   |  49 ++---
 .../log4j/core/filter/MarkerFilterTest.java        |   7 +-
 .../log4j/core/filter/NoMarkerFilterTest.java      |   5 +-
 .../logging/log4j/core/filter/RegexFilterTest.java |  19 +-
 .../filter/ScriptFileFilterPropertiesTest.java     |  21 +--
 .../log4j/core/filter/ScriptFileFilterTest.java    |  21 +--
 .../log4j/core/filter/ScriptFilterTest.java        |  21 +--
 .../log4j/core/filter/ScriptRefFilterTest.java     |  21 +--
 .../core/filter/StructuredDataFilterTest.java      |  41 ++---
 .../core/filter/ThreadContextMapFilterTest.java    |  11 +-
 .../log4j/core/filter/ThresholdFilterTest.java     |   7 +-
 .../logging/log4j/core/filter/TimeFilterTest.java  |  81 ++++----
 ...taFactoryPropertySetMissingConstructorTest.java |   4 +-
 .../impl/ContextDataFactoryPropertySetTest.java    |   4 +-
 .../log4j/core/impl/ContextDataFactoryTest.java    |   4 +-
 .../core/impl/JdkMapAdapterStringMapTest.java      | 203 ++++++++-------------
 .../log4j/core/impl/Log4jLogEventNanoTimeTest.java |  24 +--
 .../logging/log4j/core/impl/Log4jLogEventTest.java |  91 ++++-----
 .../log4j/core/impl/MutableLogEventTest.java       | 188 ++++++++++---------
 .../core/impl/ReusableLogEventFactoryTest.java     |  42 ++---
 .../core/impl/ThrowableFormatOptionsTest.java      |  90 ++++-----
 .../log4j/core/impl/ThrowableProxyTest.java        |  53 +++---
 29 files changed, 508 insertions(+), 692 deletions(-)

diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterTest.java
index 0285239..34075cd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterTest.java
@@ -22,9 +22,9 @@ import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the AbstractFilter test.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterableTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterableTest.java
index 6b9f534..55cd1b2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterableTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractFilterableTest.java
@@ -17,18 +17,18 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import static org.junit.Assert.*;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 public class AbstractFilterableTest {
 
     MockedAbstractFilterable filterable;
 
-    @Before
+    @BeforeEach
     public void setup() {
         filterable = new MockedAbstractFilterable();
     }
@@ -253,9 +253,9 @@ public class AbstractFilterableTest {
         assertSame(anotherFilter, filterable.getFilter());
     }
 
-    private class MockedAbstractFilterable extends AbstractFilterable {}
+    private static class MockedAbstractFilterable extends AbstractFilterable {}
 
-    private class EqualFilter extends AbstractFilter {
+    private static class EqualFilter extends AbstractFilter {
         private final String key;
         public EqualFilter(final String key) {
             this.key = key;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java
index 53f9cd7..6f2dc63 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java
@@ -16,56 +16,52 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 import java.util.List;
 
-import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.Named;
+import org.apache.logging.log4j.junit.UsingThreadContextMap;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Test;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
 
-/**
- *
- */
-public abstract class AbstractScriptFilterTest {
+import static org.junit.jupiter.api.Assertions.*;
 
-    public abstract LoggerContextRule getContext();
+@UsingThreadContextMap
+@Tag("groovy")
+public abstract class AbstractScriptFilterTest {
 
     @Test
-    public void testGroovyFilter() throws Exception {
-        final Logger logger = LogManager.getLogger("TestGroovyFilter");
+    public void testGroovyFilter(final LoggerContext context, @Named("List") final ListAppender app) throws Exception {
+        final Logger logger = context.getLogger("TestGroovyFilter");
         logger.traceEntry();
         logger.info("This should not be logged");
         ThreadContext.put("UserId", "JohnDoe");
         logger.info("This should be logged");
         ThreadContext.clearMap();
-        final ListAppender app = getContext().getListAppender("List");
         try {
             final List<String> messages = app.getMessages();
-            assertNotNull("No Messages", messages);
-            assertTrue("Incorrect number of messages. Expected 2, Actual " + messages.size(), messages.size() == 2);
+            assertNotNull(messages, "No Messages");
+            assertEquals(messages.size(), 2, "Incorrect number of messages. Expected 2, Actual " + messages.size());
         } finally {
             app.clear();
         }
     }
 
     @Test
-    public void testJavascriptFilter() throws Exception {
-        final Logger logger = LogManager.getLogger("TestJavaScriptFilter");
+    public void testJavascriptFilter(final LoggerContext context, @Named("List") final ListAppender app) throws Exception {
+        final Logger logger = context.getLogger("TestJavaScriptFilter");
         logger.traceEntry();
         logger.info("This should not be logged");
         ThreadContext.put("UserId", "JohnDoe");
         logger.info("This should be logged");
         ThreadContext.clearMap();
-        final ListAppender app = getContext().getListAppender("List");
         final List<String> messages = app.getMessages();
         try {
-            assertNotNull("No Messages", messages);
-            assertTrue("Incorrect number of messages. Expected 2, Actual " + messages.size(), messages.size() == 2);
+            assertNotNull(messages, "No Messages");
+            assertEquals(messages.size(), 2, "Incorrect number of messages. Expected 2, Actual " + messages.size());
         } finally {
             app.clear();
         }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterLogDelayTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterLogDelayTest.java
index 3d8af9d..9913381 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterLogDelayTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterLogDelayTest.java
@@ -17,14 +17,14 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import static org.hamcrest.Matchers.greaterThan;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.Test;
 
 import java.util.concurrent.Delayed;
 import java.util.concurrent.TimeUnit;
 
-import org.junit.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.is;
 
 /**
  * Unit test for <code>BurstFilter</code>.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java
index 31aea6d..16484f4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java
@@ -20,35 +20,31 @@ package org.apache.logging.log4j.core.filter;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-import static org.junit.Assert.*;
 /**
  * Unit test for <code>BurstFilter</code>.
  */
+@LoggerContextSource("log4j-burst.xml")
 public class BurstFilterTest {
 
-    private static final String CONFIG = "log4j-burst.xml";
-
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
+    private final ListAppender app;
+    private final BurstFilter filter;
+    private final Logger logger;
 
-    @Before
-    public void setUp() throws Exception {
-        app = context.getListAppender("ListAppender");
-        filter = (BurstFilter) app.getFilter();
-        assertNotNull("No BurstFilter", filter);
+    public BurstFilterTest(final LoggerContext context, @Named("ListAppender") final ListAppender app) {
+        this.app = app;
+        this.filter = (BurstFilter) app.getFilter();
+        assertNotNull(filter);
+        this.logger = context.getLogger(getClass());
     }
 
-    private ListAppender app;
-    private BurstFilter filter;
-
-    private final Logger logger = context.getLogger();
-
     /**
      * Test BurstFilter by surpassing maximum number of log messages allowed by filter and
      * making sure only the maximum number are indeed logged, then wait for while and make
@@ -62,13 +58,13 @@ public class BurstFilterTest {
                 Thread.sleep(200);
             }
             logger.info("Logging 110 messages, should only see 100 logs # " + (i + 1));
-            assertTrue("Incorrect number of available slots", filter.getAvailable() < 100);
+            assertTrue(filter.getAvailable() < 100, "Incorrect number of available slots");
         }
         List<String> msgs = app.getMessages();
-        assertEquals("Incorrect message count. Should be 100, actual " + msgs.size(), 100, msgs.size());
+        assertEquals(100, msgs.size(), "Incorrect message count. Should be 100, actual " + msgs.size());
         app.clear();
 
-        assertTrue("Incorrect number of available slots", filter.getAvailable() < 100);
+        assertTrue(filter.getAvailable() < 100, "Incorrect number of available slots");
         // Allow some of the events to clear
         Thread.sleep(1500);
 
@@ -77,8 +73,8 @@ public class BurstFilterTest {
         }
 
         msgs = app.getMessages();
-        assertFalse("No messages were counted.", msgs.isEmpty());
-        assertTrue("Incorrect message count. Should be > 0 and < 100, actual " + msgs.size(), msgs.size() < 100);
+        assertFalse(msgs.isEmpty(), "No messages were counted.");
+        assertTrue(msgs.size() < 100, "Incorrect message count. Should be > 0 and < 100, actual " + msgs.size());
         app.clear();
 
         filter.clear();
@@ -86,7 +82,7 @@ public class BurstFilterTest {
         for (int i = 0; i < 110; i++) {
             logger.info("Waited 1.5 seconds and trying to log again, should see more than 0 and less than 100" + (i + 1));
         }
-        assertEquals("", 0, filter.getAvailable());
+        assertEquals(0, filter.getAvailable(), "");
         app.clear();
 
 
@@ -97,7 +93,7 @@ public class BurstFilterTest {
         }
 
         msgs = app.getMessages();
-        assertTrue("Incorrect message count. Should be 0, actual " + msgs.size(), msgs.isEmpty());
+        assertTrue(msgs.isEmpty(), "Incorrect message count. Should be 0, actual " + msgs.size());
         app.clear();
 
         // now log 100 warns, they should all get through because the filter's level is set at info
@@ -106,7 +102,7 @@ public class BurstFilterTest {
         }
 
         msgs = app.getMessages();
-        assertEquals("Incorrect message count. Should be 110, actual " + msgs.size(), 110, msgs.size());
+        assertEquals(110, msgs.size(), "Incorrect message count. Should be 110, actual " + msgs.size());
         app.clear();
 
         // now log 100 errors, they should all get through because the filter level is set at info
@@ -115,7 +111,7 @@ public class BurstFilterTest {
         }
 
         msgs = app.getMessages();
-        assertEquals("Incorrect message count. Should be 110, actual " + msgs.size(), 110, msgs.size());
+        assertEquals(110, msgs.size(), "Incorrect message count. Should be 110, actual " + msgs.size());
         app.clear();
 
         // now log 100 fatals, they should all get through because the filter level is set at info
@@ -124,7 +120,7 @@ public class BurstFilterTest {
         }
 
         msgs = app.getMessages();
-        assertEquals("Incorrect message count. Should be 110, actual " + msgs.size(), 110, msgs.size());
+        assertEquals(110, msgs.size(), "Incorrect message count. Should be 110, actual " + msgs.size());
         app.clear();
 
         // wait and make sure we can log messages again despite the fact we just logged a bunch of warns, errors, fatals
@@ -134,7 +130,7 @@ public class BurstFilterTest {
             logger.debug("Waited 3+ seconds, should see 100 logs #" + (i + 1));
         }
         msgs = app.getMessages();
-        assertEquals("Incorrect message count. Should be 100, actual " + msgs.size(), 100, msgs.size());
+        assertEquals(100, msgs.size(), "Incorrect message count. Should be 100, actual " + msgs.size());
         app.clear();
 
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
index 0488d0f..87ba9dd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
@@ -16,43 +16,24 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Map;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.apache.logging.log4j.junit.ThreadContextMapRule;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.UsingThreadContextMap;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.apache.logging.log4j.status.StatusLogger;
-import org.junit.After;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-/**
- *
- */
-public class DynamicThresholdFilterTest {
+import java.util.Map;
 
-    @Rule
-    public final ThreadContextMapRule threadContextRule = new ThreadContextMapRule(); 
-    
-    @After
-    public void cleanup() {
-        final LoggerContext ctx = LoggerContext.getContext(false);
-        ctx.reconfigure();
-        StatusLogger.getLogger().reset();
-    }
+import static org.junit.jupiter.api.Assertions.*;
+
+@UsingThreadContextMap
+public class DynamicThresholdFilterTest {
 
     @Test
     public void testFilter() {
@@ -88,26 +69,23 @@ public class DynamicThresholdFilterTest {
         filter.start();
         assertTrue(filter.isStarted());
         final Object [] replacements = {"one", "two", "three"};
-        assertSame(Filter.Result.ACCEPT, filter.filter(null, Level.DEBUG, null, "some test message", replacements)); 
-        assertSame(Filter.Result.ACCEPT, filter.filter(null, Level.DEBUG, null, "some test message", "one", "two", "three")); 
+        assertSame(Filter.Result.ACCEPT, filter.filter(null, Level.DEBUG, null, "some test message", replacements));
+        assertSame(Filter.Result.ACCEPT, filter.filter(null, Level.DEBUG, null, "some test message", "one", "two", "three"));
         ThreadContext.clearMap();
     }
     
     @Test
-    public void testConfig() {
-        try (final LoggerContext ctx = Configurator.initialize("Test1",
-                "target/test-classes/log4j2-dynamicfilter.xml")) {
-            final Configuration config = ctx.getConfiguration();
-            final Filter filter = config.getFilter();
-            assertNotNull("No DynamicThresholdFilter", filter);
-            assertTrue("Not a DynamicThresholdFilter", filter instanceof DynamicThresholdFilter);
-            final DynamicThresholdFilter dynamic = (DynamicThresholdFilter) filter;
-            final String key = dynamic.getKey();
-            assertNotNull("Key is null", key);
-            assertEquals("Incorrect key value", "loginId", key);
-            final Map<String, Level> map = dynamic.getLevelMap();
-            assertNotNull("Map is null", map);
-            assertEquals("Incorrect number of map elements", 1, map.size());
-        }
+    @LoggerContextSource("log4j2-dynamicfilter.xml")
+    public void testConfig(final Configuration config) {
+        final Filter filter = config.getFilter();
+        assertNotNull(filter, "No DynamicThresholdFilter");
+        assertTrue(filter instanceof DynamicThresholdFilter, "Not a DynamicThresholdFilter");
+        final DynamicThresholdFilter dynamic = (DynamicThresholdFilter) filter;
+        final String key = dynamic.getKey();
+        assertNotNull(key, "Key is null");
+        assertEquals("loginId", key, "Incorrect key value");
+        final Map<String, Level> map = dynamic.getLevelMap();
+        assertNotNull(map, "Map is null");
+        assertEquals(1, map.size(), "Incorrect number of map elements");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/LevelRangeFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/LevelRangeFilterTest.java
index b99c6a9..16362d0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/LevelRangeFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/LevelRangeFilterTest.java
@@ -21,13 +21,10 @@ import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class LevelRangeFilterTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java
index 97b2185..f44ac47 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java
@@ -16,12 +16,6 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -33,26 +27,23 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.message.StringMapMessage;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.apache.logging.log4j.util.IndexedReadOnlyStringMap;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-/**
- *
- */
-public class MapFilterTest {
+import static org.junit.jupiter.api.Assertions.*;
 
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule("log4j2-mapfilter.xml");
+public class MapFilterTest {
 
     @Test
     public void testFilter() {
         final KeyValuePair[] pairs = new KeyValuePair[] { new KeyValuePair("FromAccount", "211000"),
                                                     new KeyValuePair("ToAccount", "123456")};
         MapFilter filter = MapFilter.createFilter(pairs, "and", null, null);
+        assertNotNull(filter);
         filter.start();
         StringMapMessage msg = new StringMapMessage();
         msg.put("ToAccount", "123456");
@@ -63,6 +54,7 @@ public class MapFilterTest {
         msg.put("ToAccount", "111111");
         assertSame(Filter.Result.DENY, filter.filter(null, Level.ERROR, null, msg, null));
         filter = MapFilter.createFilter(pairs, "or", null, null);
+        assertNotNull(filter);
         filter.start();
         msg = new StringMapMessage();
         msg.put("ToAccount", "123456");
@@ -75,28 +67,25 @@ public class MapFilterTest {
     }
 
     @Test
-    public void testConfig() {
-        final Configuration config = context.getConfiguration();
+    @LoggerContextSource("log4j2-mapfilter.xml")
+    public void testConfig(final Configuration config, @Named("LIST") final ListAppender app) {
         final Filter filter = config.getFilter();
-        assertNotNull("No MapFilter", filter);
-        assertTrue("Not a MapFilter", filter instanceof  MapFilter);
+        assertNotNull(filter, "No MapFilter");
+        assertTrue(filter instanceof  MapFilter, "Not a MapFilter");
         final MapFilter mapFilter = (MapFilter) filter;
-        assertFalse("Should not be And filter", mapFilter.isAnd());
+        assertFalse(mapFilter.isAnd(), "Should not be And filter");
         final IndexedReadOnlyStringMap map = mapFilter.getStringMap();
-        assertNotNull("No Map", map);
-        assertFalse("No elements in Map", map.isEmpty());
-        assertEquals("Incorrect number of elements in Map", 1, map.size());
-        assertTrue("Map does not contain key eventId", map.containsKey("eventId"));
-        assertEquals("List does not contain 2 elements", 2, map.<Collection<?>>getValue("eventId").size());
+        assertNotNull(map, "No Map");
+        assertFalse(map.isEmpty(), "No elements in Map");
+        assertEquals(1, map.size(), "Incorrect number of elements in Map");
+        assertTrue(map.containsKey("eventId"), "Map does not contain key eventId");
+        assertEquals(2, map.<Collection<?>>getValue("eventId").size(), "List does not contain 2 elements");
         final Logger logger = LogManager.getLogger(MapFilterTest.class);
         final Map<String, String> eventMap = new HashMap<>();
         eventMap.put("eventId", "Login");
         logger.debug(new StringMapMessage(eventMap));
-        final ListAppender app = context.getListAppender("LIST");
         final List<String> msgs = app.getMessages();
-        assertNotNull("No messages", msgs);
-        assertFalse("No messages", msgs.isEmpty());
-
-
+        assertNotNull(msgs, "No messages");
+        assertFalse(msgs.isEmpty(), "No messages");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java
index 1850e77..8ef4a46 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java
@@ -23,13 +23,10 @@ import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class MarkerFilterTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java
index f833858..d98a5d4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java
@@ -23,10 +23,9 @@ import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
 
 public class NoMarkerFilterTest {
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java
index c48edbe..19dbed9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java
@@ -16,12 +16,6 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.Filter.Result;
@@ -30,14 +24,15 @@ import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class RegexFilterTest {
-    @BeforeClass
+    @BeforeAll
     public static void before() {
         StatusLogger.getLogger().setLevel(Level.OFF);
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java
index 7e0e582..4d7acc4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java
@@ -16,25 +16,8 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.categories.Scripts;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
+import org.apache.logging.log4j.junit.LoggerContextSource;
 
-/**
- *
- */
-@Category(Scripts.Groovy.class)
+@LoggerContextSource("log4j-scriptFile-filters.properties")
 public class ScriptFileFilterPropertiesTest extends AbstractScriptFilterTest {
-
-    private static final String CONFIG = "log4j-scriptFile-filters.properties";
-
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
-
-    @Override
-    public LoggerContextRule getContext() {
-        return context;
-    }
-
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java
index c0818dc..0cb652d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java
@@ -16,25 +16,8 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.categories.Scripts;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
+import org.apache.logging.log4j.junit.LoggerContextSource;
 
-/**
- *
- */
-@Category(Scripts.Groovy.class)
+@LoggerContextSource("log4j-scriptFile-filters.xml")
 public class ScriptFileFilterTest extends AbstractScriptFilterTest {
-
-    private static final String CONFIG = "log4j-scriptFile-filters.xml";
-
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
-
-    @Override
-    public LoggerContextRule getContext() {
-        return context;
-    }
-
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java
index 47f7594..ff0a51b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java
@@ -16,25 +16,8 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.categories.Scripts;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
+import org.apache.logging.log4j.junit.LoggerContextSource;
 
-/**
- *
- */
-@Category(Scripts.Groovy.class)
+@LoggerContextSource("log4j-script-filters.xml")
 public class ScriptFilterTest extends AbstractScriptFilterTest {
-
-    private static final String CONFIG = "log4j-script-filters.xml";
-
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
-
-    @Override
-    public LoggerContextRule getContext() {
-        return context;
-    }
-
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java
index d2e4960..9d6b863 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java
@@ -16,25 +16,8 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.categories.Scripts;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
+import org.apache.logging.log4j.junit.LoggerContextSource;
 
-/**
- *
- */
-@Category(Scripts.Groovy.class)
+@LoggerContextSource("log4j-scriptRef-filters.xml")
 public class ScriptRefFilterTest extends AbstractScriptFilterTest {
-
-    private static final String CONFIG = "log4j-scriptRef-filters.xml";
-
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
-
-    @Override
-    public LoggerContextRule getContext() {
-        return context;
-    }
-
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java
index 7d49234..b1689dd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java
@@ -16,37 +16,27 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
 import java.util.Collection;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.junit.LoggerContextSource;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.util.IndexedReadOnlyStringMap;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-/**
- *
- */
-public class StructuredDataFilterTest {
+import static org.junit.jupiter.api.Assertions.*;
 
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule("log4j2-sdfilter.xml");
+public class StructuredDataFilterTest {
 
     @Test
     public void testFilter() {
         final KeyValuePair[] pairs = new KeyValuePair[] { new KeyValuePair("id.name", "AccountTransfer"),
                                                     new KeyValuePair("ToAccount", "123456")};
         StructuredDataFilter filter = StructuredDataFilter.createFilter(pairs, "and", null, null);
+        assertNotNull(filter);
         filter.start();
         StructuredDataMessage msg = new StructuredDataMessage("AccountTransfer@18060", "Transfer Successful", "Audit");
         msg.put("ToAccount", "123456");
@@ -57,6 +47,7 @@ public class StructuredDataFilterTest {
         msg.put("ToAccount", "111111");
         assertSame(Filter.Result.DENY, filter.filter(null, Level.ERROR, null, msg, null));
         filter = StructuredDataFilter.createFilter(pairs, "or", null, null);
+        assertNotNull(filter);
         filter.start();
         msg = new StructuredDataMessage("AccountTransfer@18060", "Transfer Successful", "Audit");
         msg.put("ToAccount", "123456");
@@ -69,18 +60,18 @@ public class StructuredDataFilterTest {
     }
 
     @Test
-    public void testConfig() {
-        final Configuration config = context.getConfiguration();
+    @LoggerContextSource("log4j2-sdfilter.xml")
+    public void testConfig(final Configuration config) {
         final Filter filter = config.getFilter();
-        assertNotNull("No StructuredDataFilter", filter);
-        assertTrue("Not a StructuredDataFilter", filter instanceof  StructuredDataFilter);
+        assertNotNull(filter, "No StructuredDataFilter");
+        assertTrue(filter instanceof  StructuredDataFilter, "Not a StructuredDataFilter");
         final StructuredDataFilter sdFilter = (StructuredDataFilter) filter;
-        assertFalse("Should not be And filter", sdFilter.isAnd());
+        assertFalse(sdFilter.isAnd(), "Should not be And filter");
         final IndexedReadOnlyStringMap map = sdFilter.getStringMap();
-        assertNotNull("No Map", map);
-        assertFalse("No elements in Map", map.isEmpty());
-        assertEquals("Incorrect number of elements in Map", 1, map.size());
-        assertTrue("Map does not contain key eventId", map.containsKey("eventId"));
-        assertEquals("List does not contain 2 elements", 2, map.<Collection<?>>getValue("eventId").size());
+        assertNotNull(map, "No Map");
+        assertFalse(map.isEmpty(), "No elements in Map");
+        assertEquals(1, map.size(), "Incorrect number of elements in Map");
+        assertTrue(map.containsKey("eventId"), "Map does not contain key eventId");
+        assertEquals(2, map.<Collection<?>>getValue("eventId").size(), "List does not contain 2 elements");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilterTest.java
index 546ef30..2ef851c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilterTest.java
@@ -20,14 +20,10 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-
-/**
- *
- */
 public class ThreadContextMapFilterTest {
 
     @Test
@@ -37,6 +33,7 @@ public class ThreadContextMapFilterTest {
         final KeyValuePair[] pairs = new KeyValuePair[] { new KeyValuePair("userid", "JohnDoe"),
                                                     new KeyValuePair("organization", "Apache")};
         ThreadContextMapFilter filter = ThreadContextMapFilter.createFilter(pairs, "and", null, null);
+        assertNotNull(filter);
         filter.start();
         assertTrue(filter.isStarted());
         assertSame(Filter.Result.DENY, filter.filter(null, Level.DEBUG, null, (Object) null, (Throwable) null));
@@ -48,6 +45,7 @@ public class ThreadContextMapFilterTest {
         assertSame(Filter.Result.DENY, filter.filter(null, Level.DEBUG, null, (Object) null, (Throwable) null));
         ThreadContext.clearMap();
         filter = ThreadContextMapFilter.createFilter(pairs, "or", null, null);
+        assertNotNull(filter);
         filter.start();
         assertTrue(filter.isStarted());
         ThreadContext.put("userid", "testuser");
@@ -59,6 +57,7 @@ public class ThreadContextMapFilterTest {
         assertSame(Filter.Result.DENY, filter.filter(null, Level.DEBUG, null, (Object) null, (Throwable) null));
         final KeyValuePair[] single = new KeyValuePair[] {new KeyValuePair("userid", "testuser")};
         filter = ThreadContextMapFilter.createFilter(single, null, null, null);
+        assertNotNull(filter);
         filter.start();
         assertTrue(filter.isStarted());
         assertSame(Filter.Result.NEUTRAL, filter.filter(null, Level.DEBUG, null, (Object) null, (Throwable) null));
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java
index 5ae7d52..4fed511 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java
@@ -21,13 +21,10 @@ import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class ThresholdFilterTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java
index 0e9e95a..1f22222 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java
@@ -30,15 +30,12 @@ import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.time.Clock;
 import org.apache.logging.log4j.core.time.ClockFactory;
 import org.apache.logging.log4j.core.time.ClockFactoryTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class TimeFilterTest {
     private static long CLOCKTIME = System.currentTimeMillis();
 
@@ -50,12 +47,12 @@ public class TimeFilterTest {
         }
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void beforeClass() {
         System.setProperty(ClockFactory.PROPERTY_NAME, FixedTimeClock.class.getName());
     }
 
-    @AfterClass
+    @AfterAll
     public static void afterClass() throws IllegalAccessException {
         ClockFactoryTest.resetClocks();
     }
@@ -69,15 +66,18 @@ public class TimeFilterTest {
         ZonedDateTime date = ZonedDateTime.of(2020, 3, 8, 2, 6, 30, 0, ZoneId.of("America/Los_Angeles"));
         CLOCKTIME = date.toInstant().toEpochMilli();
         LogEvent event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.plusDays(1).withHour(2);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.withHour(4);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is within range: " + filter.toString(), Filter.Result.DENY, filter.filter(event));
+        assertSame(Filter.Result.DENY, filter.filter(event),
+                "Time " + CLOCKTIME + " is within range: " + filter.toString());
     }
 
 
@@ -90,19 +90,23 @@ public class TimeFilterTest {
         ZonedDateTime date = ZonedDateTime.of(2020, 11, 1, 1, 6, 30, 0, ZoneId.of("America/Los_Angeles")).withEarlierOffsetAtOverlap();
         CLOCKTIME = date.toInstant().toEpochMilli();
         LogEvent event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = ZonedDateTime.of(2020, 11, 1, 1, 6, 30, 0, ZoneId.of("America/Los_Angeles")).withLaterOffsetAtOverlap();
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is within range: " + filter.toString(), Filter.Result.DENY, filter.filter(event));
+        assertSame(Filter.Result.DENY, filter.filter(event),
+                "Time " + CLOCKTIME + " is within range: " + filter.toString());
         date = date.plusDays(1).withHour(1).withMinute(30);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.withHour(4);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is within range: " + filter.toString(), Filter.Result.DENY, filter.filter(event));
+        assertSame(Filter.Result.DENY, filter.filter(event),
+                "Time " + CLOCKTIME + " is within range: " + filter.toString());
     }
 
 
@@ -115,19 +119,23 @@ public class TimeFilterTest {
         ZonedDateTime date = ZonedDateTime.of(2020, 3, 10, 23, 30, 30, 0, ZoneId.of("America/Los_Angeles")).withEarlierOffsetAtOverlap();
         CLOCKTIME = date.toInstant().toEpochMilli();
         LogEvent event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.plusHours(1);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.plusHours(1);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is within range: " + filter.toString(), Filter.Result.DENY, filter.filter(event));
+        assertSame(Filter.Result.DENY, filter.filter(event),
+                "Time " + CLOCKTIME + " is within range: " + filter.toString());
         date = date.plusDays(1).withHour(0);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
     }
 
     @Test
@@ -139,19 +147,23 @@ public class TimeFilterTest {
         ZonedDateTime date = ZonedDateTime.of(2020, 3, 7, 23, 30, 30, 0, ZoneId.of("America/Los_Angeles")).withEarlierOffsetAtOverlap();
         CLOCKTIME = date.toInstant().toEpochMilli();
         LogEvent event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.plusHours(1);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.plusHours(2);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is within range: " + filter.toString(), Filter.Result.DENY, filter.filter(event));
+        assertSame(Filter.Result.DENY, filter.filter(event),
+                "Time " + CLOCKTIME + " is within range: " + filter.toString());
         date = date.plusDays(1).withHour(0);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
     }
 
 
@@ -164,19 +176,23 @@ public class TimeFilterTest {
         ZonedDateTime date = ZonedDateTime.of(2020, 10, 31, 23, 30, 30, 0, ZoneId.of("America/Los_Angeles")).withEarlierOffsetAtOverlap();
         CLOCKTIME = date.toInstant().toEpochMilli();
         LogEvent event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.plusHours(1);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         date = date.plusHours(2);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is within range: " + filter.toString(), Filter.Result.DENY, filter.filter(event));
+        assertSame(Filter.Result.DENY, filter.filter(event),
+                "Time " + CLOCKTIME + " is within range: " + filter.toString());
         date = date.plusDays(1).withHour(0);
         CLOCKTIME = date.toInstant().toEpochMilli();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
     }
 
     @Test
@@ -190,19 +206,22 @@ public class TimeFilterTest {
         CLOCKTIME = cal.getTimeInMillis();
         LogEvent event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
         //assertSame(Filter.Result.NEUTRAL, filter.filter(null, Level.ERROR, null, (Object) null, (Throwable) null));
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
 
         cal.add(Calendar.DATE, 1);
         cal.set(Calendar.HOUR_OF_DAY, 2);
         CLOCKTIME = cal.getTimeInMillis();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
-        assertSame("Time " + CLOCKTIME + " is not within range: " + filter.toString(), Filter.Result.NEUTRAL, filter.filter(event));
+        assertSame(Filter.Result.NEUTRAL, filter.filter(event),
+                "Time " + CLOCKTIME + " is not within range: " + filter.toString());
         //assertSame(Filter.Result.NEUTRAL, filter.filter(null, Level.ERROR, null, (Object) null, (Throwable) null));
 
         cal.set(Calendar.HOUR_OF_DAY, 4);
         CLOCKTIME = cal.getTimeInMillis();
         event = Log4jLogEvent.newBuilder().setTimeMillis(CLOCKTIME).build();
         //assertSame(Filter.Result.DENY, filter.filter(null, Level.ERROR, null, (Object) null, (Throwable) null));
-        assertSame("Time " + CLOCKTIME + " is within range: " + filter.toString(), Filter.Result.DENY, filter.filter(event));
+        assertSame(Filter.Result.DENY, filter.filter(event),
+                "Time " + CLOCKTIME + " is within range: " + filter.toString());
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
index b86588f..13a39ed 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
@@ -19,9 +19,9 @@ package org.apache.logging.log4j.core.impl;
 import java.lang.reflect.Field;
 
 import org.apache.logging.log4j.util.SortedArrayStringMap;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the ContextDataFactory class.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java
index 484923e..ed5ce3f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.logging.log4j.core.impl;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the ContextDataFactory class.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
index 10a2e96..24fce8f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
@@ -19,9 +19,9 @@ package org.apache.logging.log4j.core.impl;
 import java.lang.reflect.Field;
 
 import org.apache.logging.log4j.util.SortedArrayStringMap;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the ContextDataFactory class.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMapTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMapTest.java
index c3cc13f..b15e0d4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMapTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMapTest.java
@@ -26,18 +26,18 @@ import java.util.Map;
 
 import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.TriConsumer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the JdkMapAdapterStringMap class.
  */
 public class JdkMapAdapterStringMapTest {
 
-    @Test(expected = NullPointerException.class)
-    public void testConstructorDisallowsNull() throws Exception {
-        new JdkMapAdapterStringMap(null);
+    @Test
+    public void testConstructorDisallowsNull() {
+        assertThrows(NullPointerException.class, () -> new JdkMapAdapterStringMap(null));
     }
 
     @Test
@@ -114,7 +114,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("c", "cc");
         original.putAll(other);
 
-        assertEquals("size after put other", 7, original.size());
+        assertEquals(7, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("cc", original.getValue("c"));
@@ -139,7 +139,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("a", "aa");
         original.putAll(other);
 
-        assertEquals("size after put other", 7, original.size());
+        assertEquals(7, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("cORIG", original.getValue("c"));
@@ -163,7 +163,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("a", "aa");
         original.putAll(other);
 
-        assertEquals("size after put other", 6, original.size());
+        assertEquals(6, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("11", original.getValue("1"));
@@ -187,7 +187,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("a", "aa");
         original.putAll(other);
 
-        assertEquals("size after put other", 7, original.size());
+        assertEquals(7, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("cORIG", original.getValue("c"));
@@ -211,7 +211,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("a", "aa");
         original.putAll(other);
 
-        assertEquals("size after put other", 6, original.size());
+        assertEquals(6, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("11", original.getValue("1"));
@@ -236,7 +236,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("a", "aa");
         original.putAll(other);
 
-        assertEquals("size after put other", 7, original.size());
+        assertEquals(7, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("cORIG", original.getValue("c"));
@@ -261,7 +261,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("a", "aa");
         original.putAll(other);
 
-        assertEquals("size after put other", 6, original.size());
+        assertEquals(6, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("11", original.getValue("1"));
@@ -284,7 +284,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("c", "cc");
         original.putAll(other);
 
-        assertEquals("size after put other", 5, original.size());
+        assertEquals(5, original.size(), "size after put other");
         assertEquals("aa", original.getValue("a"));
         assertEquals("bORIG", original.getValue("b"));
         assertEquals("cc", original.getValue("c"));
@@ -347,11 +347,11 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("a", "aaa");
         original.putValue("b", "bbb");
         original.putValue("c", "ccc");
-        assertEquals("size", 3, original.size());
+        assertEquals(3, original.size(), "size");
 
         // add empty context data
         original.putAll(new JdkMapAdapterStringMap());
-        assertEquals("size after put empty", 3, original.size());
+        assertEquals(3, original.size(), "size after put empty");
         assertEquals("aaa", original.getValue("a"));
         assertEquals("bbb", original.getValue("b"));
         assertEquals("ccc", original.getValue("c"));
@@ -362,7 +362,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("3", "333");
         original.putAll(other);
 
-        assertEquals("size after put other", 6, original.size());
+        assertEquals(6, original.size(), "size after put other");
         assertEquals("aaa", original.getValue("a"));
         assertEquals("bbb", original.getValue("b"));
         assertEquals("ccc", original.getValue("c"));
@@ -378,11 +378,11 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("b", "bbb");
         original.putValue("c", "ccc");
         original.putValue("d", "ddd");
-        assertEquals("size", 4, original.size());
+        assertEquals(4, original.size(), "size");
 
         // add empty context data
         original.putAll(new JdkMapAdapterStringMap());
-        assertEquals("size after put empty", 4, original.size());
+        assertEquals(4, original.size(), "size after put empty");
         assertEquals("aaa", original.getValue("a"));
         assertEquals("bbb", original.getValue("b"));
         assertEquals("ccc", original.getValue("c"));
@@ -395,7 +395,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue("4", "444");
         original.putAll(other);
 
-        assertEquals("size after put other", 8, original.size());
+        assertEquals(8, original.size(), "size after put other");
         assertEquals("aaa", original.getValue("a"));
         assertEquals("bbb", original.getValue("b"));
         assertEquals("ccc", original.getValue("c"));
@@ -414,7 +414,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("b", "bbb");
         original.putValue("c", "ccc");
         original.putValue("d", "ddd");
-        assertEquals("size", 5, original.size());
+        assertEquals(5, original.size(), "size");
 
         final JdkMapAdapterStringMap other = new JdkMapAdapterStringMap();
         for (int i = 0 ; i < 500; i++) {
@@ -423,7 +423,7 @@ public class JdkMapAdapterStringMapTest {
         other.putValue(null, "otherVal");
         original.putAll(other);
 
-        assertEquals("size after put other", 505, original.size());
+        assertEquals(505, original.size(), "size after put other");
         assertEquals("otherVal", original.getValue(null));
         assertEquals("aaa", original.getValue("a"));
         assertEquals("bbb", original.getValue("b"));
@@ -440,11 +440,11 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("a", "aaa");
         original.putValue("b", "bbb");
         original.putValue("c", "ccc");
-        assertEquals("size", 3, original.size());
+        assertEquals(3, original.size(), "size");
 
         // putAll with self
         original.putAll(original);
-        assertEquals("size after put empty", 3, original.size());
+        assertEquals(3, original.size(), "size after put empty");
         assertEquals("aaa", original.getValue("a"));
         assertEquals("bbb", original.getValue("b"));
         assertEquals("ccc", original.getValue("c"));
@@ -458,12 +458,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("c", "aaa");
         original.putValue("d", "aaa");
         original.putValue("e", "aaa");
-        original.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String s, final Object o) {
-                original.putValue("c" + s, "other");
-            }
-        });
+        original.forEach((s, o) -> original.putValue("c" + s, "other"));
     }
 
     @Test
@@ -474,12 +469,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("c", "aaa");
         original.putValue("d", "aaa");
         original.putValue("e", "aaa");
-        original.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String s, final Object o) {
-                original.putValue("c" + s, "other");
-            }
-        });
+        original.forEach((s, o) -> original.putValue("c" + s, "other"));
     }
 
     @Test
@@ -488,12 +478,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("a", "aaa");
         original.putValue("b", "aaa");
         original.putValue("c", "aaa");
-        original.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String s, final Object o) {
-                original.remove("a");
-            }
-        });
+        original.forEach((s, o) -> original.remove("a"));
     }
 
     @Test
@@ -504,12 +489,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("c", "aaa");
         original.putValue("d", "aaa");
         original.putValue("e", "aaa");
-        original.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String s, final Object o) {
-                original.clear();
-            }
-        });
+        original.forEach((s, o) -> original.clear());
     }
 
     @Test
@@ -519,12 +499,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("b", "aaa");
         original.putValue("d", "aaa");
         original.putValue("e", "aaa");
-        original.forEach(new TriConsumer<String, Object, Object>() {
-            @Override
-            public void accept(final String s, final Object o, final Object o2) {
-                original.putValue("c", "other");
-            }
-        }, null);
+        original.forEach((s, o, o2) -> original.putValue("c", "other"), null);
     }
 
     @Test
@@ -535,12 +510,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("c", "aaa");
         original.putValue("d", "aaa");
         original.putValue("e", "aaa");
-        original.forEach(new TriConsumer<String, Object, Object>() {
-            @Override
-            public void accept(final String s, final Object o, final Object o2) {
-                original.putValue("c" + s, "other");
-            }
-        }, null);
+        original.forEach((s, o, o2) -> original.putValue("c" + s, "other"), null);
     }
 
     @Test
@@ -549,12 +519,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("a", "aaa");
         original.putValue("b", "aaa");
         original.putValue("c", "aaa");
-        original.forEach(new TriConsumer<String, Object, Object>() {
-            @Override
-            public void accept(final String s, final Object o, final Object o2) {
-                original.remove("a");
-            }
-        }, null);
+        original.forEach((s, o, o2) -> original.remove("a"), null);
     }
 
     @Test
@@ -564,12 +529,7 @@ public class JdkMapAdapterStringMapTest {
         original.putValue("b", "aaa");
         original.putValue("c", "aaa");
         original.putValue("d", "aaa");
-        original.forEach(new TriConsumer<String, Object, Object>() {
-            @Override
-            public void accept(final String s, final Object o, final Object o2) {
-                original.clear();
-            }
-        }, null);
+        original.forEach((s, o, o2) -> original.clear(), null);
     }
 
     @Test
@@ -580,24 +540,24 @@ public class JdkMapAdapterStringMapTest {
     @Test
     public void testIsFrozenAfterCallingFreeze() {
         final JdkMapAdapterStringMap original = new JdkMapAdapterStringMap();
-        assertFalse("before freeze", original.isFrozen());
+        assertFalse(original.isFrozen(), "before freeze");
         original.freeze();
-        assertTrue("after freeze", original.isFrozen());
+        assertTrue(original.isFrozen(), "after freeze");
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testFreezeProhibitsPutValue() {
         final JdkMapAdapterStringMap original = new JdkMapAdapterStringMap();
         original.freeze();
-        original.putValue("a", "aaa");
+        assertThrows(UnsupportedOperationException.class, () -> original.putValue("a", "aaa"));
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testFreezeProhibitsRemove() {
         final JdkMapAdapterStringMap original = new JdkMapAdapterStringMap();
         original.putValue("b", "bbb");
         original.freeze();
-        original.remove("b"); // existing key: modifies the collection
+        assertThrows(UnsupportedOperationException.class, () -> original.remove("b")); // existing key: modifies the collection
     }
 
     @Test
@@ -615,12 +575,12 @@ public class JdkMapAdapterStringMapTest {
         original.remove("a"); // no exception
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testFreezeProhibitsClear() {
         final JdkMapAdapterStringMap original = new JdkMapAdapterStringMap();
         original.putValue("a", "aaa");
         original.freeze();
-        original.clear();
+        assertThrows(UnsupportedOperationException.class, original::clear);
     }
 
     @Test
@@ -674,27 +634,27 @@ public class JdkMapAdapterStringMapTest {
         expected.put("3", "3value");
         expected.put("c", "cvalue");
         expected.put("d", "dvalue");
-        assertEquals("initial", expected, original.toMap());
+        assertEquals(expected, original.toMap(), "initial");
 
         original.putValue(null, "nullvalue");
         expected.put(null, "nullvalue");
         assertEquals(6, original.size());
-        assertEquals("with null key", expected, original.toMap());
+        assertEquals(expected, original.toMap(), "with null key");
 
         original.putValue(null, "otherNullvalue");
         expected.put(null, "otherNullvalue");
         assertEquals(6, original.size());
-        assertEquals("with null key value2", expected, original.toMap());
+        assertEquals(expected, original.toMap(), "with null key value2");
 
         original.putValue(null, "nullvalue");
         expected.put(null, "nullvalue");
         assertEquals(6, original.size());
-        assertEquals("with null key value1 again", expected, original.toMap());
+        assertEquals(expected, original.toMap(), "with null key value1 again");
 
         original.putValue(null, "abc");
         expected.put(null, "abc");
         assertEquals(6, original.size());
-        assertEquals("with null key value3", expected, original.toMap());
+        assertEquals(expected, original.toMap(), "with null key value3");
     }
 
     @Test
@@ -706,11 +666,11 @@ public class JdkMapAdapterStringMapTest {
 
         original.remove("a");
         assertEquals(0, original.size());
-        assertNull("no a val", original.getValue("a"));
+        assertNull(original.getValue("a"), "no a val");
 
         original.remove("B");
         assertEquals(0, original.size());
-        assertNull("no B val", original.getValue("B"));
+        assertNull(original.getValue("B"), "no B val");
     }
 
     @Test
@@ -732,11 +692,11 @@ public class JdkMapAdapterStringMapTest {
 
         original.putValue("a", null);
         assertEquals(1, original.size());
-        assertNull("no a val", original.getValue("a"));
+        assertNull(original.getValue("a"), "no a val");
 
         original.putValue("B", null);
         assertEquals(2, original.size());
-        assertNull("no B val", original.getValue("B"));
+        assertNull(original.getValue("B"), "no B val");
     }
 
     @Test
@@ -772,65 +732,65 @@ public class JdkMapAdapterStringMapTest {
     @Test
     public void testContainsKey() throws Exception {
         final JdkMapAdapterStringMap original = new JdkMapAdapterStringMap();
-        assertFalse("a", original.containsKey("a"));
-        assertFalse("B", original.containsKey("B"));
-        assertFalse("3", original.containsKey("3"));
-        assertFalse("A", original.containsKey("A"));
+        assertFalse(original.containsKey("a"), "a");
+        assertFalse(original.containsKey("B"), "B");
+        assertFalse(original.containsKey("3"), "3");
+        assertFalse(original.containsKey("A"), "A");
 
         original.putValue("a", "avalue");
-        assertTrue("a", original.containsKey("a"));
-        assertFalse("B", original.containsKey("B"));
-        assertFalse("3", original.containsKey("3"));
-        assertFalse("A", original.containsKey("A"));
+        assertTrue(original.containsKey("a"), "a");
+        assertFalse(original.containsKey("B"), "B");
+        assertFalse(original.containsKey("3"), "3");
+        assertFalse(original.containsKey("A"), "A");
 
         original.putValue("B", "Bvalue");
-        assertTrue("a", original.containsKey("a"));
-        assertTrue("B", original.containsKey("B"));
-        assertFalse("3", original.containsKey("3"));
-        assertFalse("A", original.containsKey("A"));
+        assertTrue(original.containsKey("a"), "a");
+        assertTrue(original.containsKey("B"), "B");
+        assertFalse(original.containsKey("3"), "3");
+        assertFalse(original.containsKey("A"), "A");
 
         original.putValue("3", "3value");
-        assertTrue("a", original.containsKey("a"));
-        assertTrue("B", original.containsKey("B"));
-        assertTrue("3", original.containsKey("3"));
-        assertFalse("A", original.containsKey("A"));
+        assertTrue(original.containsKey("a"), "a");
+        assertTrue(original.containsKey("B"), "B");
+        assertTrue(original.containsKey("3"), "3");
+        assertFalse(original.containsKey("A"), "A");
 
         original.putValue("A", "AAA");
-        assertTrue("a", original.containsKey("a"));
-        assertTrue("B", original.containsKey("B"));
-        assertTrue("3", original.containsKey("3"));
-        assertTrue("A", original.containsKey("A"));
+        assertTrue(original.containsKey("a"), "a");
+        assertTrue(original.containsKey("B"), "B");
+        assertTrue(original.containsKey("3"), "3");
+        assertTrue(original.containsKey("A"), "A");
     }
 
     @Test
     public void testSizeAndIsEmpty() throws Exception {
         final JdkMapAdapterStringMap original = new JdkMapAdapterStringMap();
         assertEquals(0, original.size());
-        assertTrue("initial", original.isEmpty());
+        assertTrue(original.isEmpty(), "initial");
 
         original.putValue("a", "avalue");
         assertEquals(1, original.size());
-        assertFalse("size=" + original.size(), original.isEmpty());
+        assertFalse(original.isEmpty(), "size=" + original.size());
 
         original.putValue("B", "Bvalue");
         assertEquals(2, original.size());
-        assertFalse("size=" + original.size(), original.isEmpty());
+        assertFalse(original.isEmpty(), "size=" + original.size());
 
         original.putValue("3", "3value");
         assertEquals(3, original.size());
-        assertFalse("size=" + original.size(), original.isEmpty());
+        assertFalse(original.isEmpty(), "size=" + original.size());
 
         original.remove("B");
         assertEquals(2, original.size());
-        assertFalse("size=" + original.size(), original.isEmpty());
+        assertFalse(original.isEmpty(), "size=" + original.size());
 
         original.remove("3");
         assertEquals(1, original.size());
-        assertFalse("size=" + original.size(), original.isEmpty());
+        assertFalse(original.isEmpty(), "size=" + original.size());
 
         original.remove("a");
         assertEquals(0, original.size());
-        assertTrue("size=" + original.size(), original.isEmpty());
+        assertTrue(original.isEmpty(), "size=" + original.size());
     }
 
     @Test
@@ -847,7 +807,7 @@ public class JdkMapAdapterStringMapTest {
 //                assertEquals("key", key, original.getKeyAt(count));
 //                assertEquals("val", value, original.getValueAt(count));
                 count++;
-                assertTrue("count should not exceed size but was " + count, count <= original.size());
+                assertTrue(count <= original.size(), "count should not exceed size but was " + count);
             }
         });
     }
@@ -856,15 +816,12 @@ public class JdkMapAdapterStringMapTest {
         JdkMapAdapterStringMap data;
         int count;
     }
-    static TriConsumer<String, String, JdkMapAdapterStringMapTest.State> COUNTER = new TriConsumer<String, String, JdkMapAdapterStringMapTest.State>() {
-        @Override
-        public void accept(final String key, final String value, final JdkMapAdapterStringMapTest.State state) {
+    static TriConsumer<String, String, JdkMapAdapterStringMapTest.State> COUNTER = (key, value, state) -> {
 //            assertEquals("key", key, state.data.getKeyAt(state.count));
 //            assertEquals("val", value, state.data.getValueAt(state.count));
-            state.count++;
-            assertTrue("count should not exceed size but was " + state.count,
-                    state.count <= state.data.size());
-        }
+        state.count++;
+        assertTrue(
+                state.count <= state.data.size(), "count should not exceed size but was " + state.count);
     };
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventNanoTimeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventNanoTimeTest.java
index 86383b5..add0c9e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventNanoTimeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventNanoTimeTest.java
@@ -29,21 +29,23 @@ import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.core.time.internal.DummyNanoClock;
 import org.apache.logging.log4j.core.time.SystemNanoClock;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
+@Tag("functional")
 public class Log4jLogEventNanoTimeTest {
 
-    @BeforeClass
+    @BeforeAll
     public static void beforeClass() {
         System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
                 "NanoTimeToFileTest.xml");
     }
 
-    @AfterClass
+    @AfterAll
     public static void afterClass() {
         System.setProperty(Constants.LOG4J_CONTEXT_SELECTOR, Strings.EMPTY);
     }
@@ -56,12 +58,12 @@ public class Log4jLogEventNanoTimeTest {
         final Logger log = LogManager.getLogger("com.foo.Bar");
         final long before = System.nanoTime();
         log.info("Use actual System.nanoTime()");
-        assertTrue("using SystemNanoClock", Log4jLogEvent.getNanoClock() instanceof SystemNanoClock);
+        assertTrue(Log4jLogEvent.getNanoClock() instanceof SystemNanoClock, "using SystemNanoClock");
 
         final long DUMMYNANOTIME = 123;
         Log4jLogEvent.setNanoClock(new DummyNanoClock(DUMMYNANOTIME));
         log.info("Use dummy nano clock");
-        assertTrue("using SystemNanoClock", Log4jLogEvent.getNanoClock() instanceof DummyNanoClock);
+        assertTrue(Log4jLogEvent.getNanoClock() instanceof DummyNanoClock, "using SystemNanoClock");
         
         CoreLoggerContexts.stopLoggerContext(file); // stop async thread
 
@@ -75,13 +77,13 @@ public class Log4jLogEventNanoTimeTest {
         }
         file.delete();
 
-        assertNotNull("line1", line1);
-        assertNotNull("line2", line2);
+        assertNotNull(line1, "line1");
+        assertNotNull(line2, "line2");
         final String[] line1Parts = line1.split(" AND ");
         assertEquals("Use actual System.nanoTime()", line1Parts[2]);
         assertEquals(line1Parts[0], line1Parts[1]);
         final long loggedNanoTime = Long.parseLong(line1Parts[0]);
-        assertTrue("used system nano time", loggedNanoTime - before < TimeUnit.SECONDS.toNanos(1));
+        assertTrue(loggedNanoTime - before < TimeUnit.SECONDS.toNanos(1), "used system nano time");
         
         final String[] line2Parts = line2.split(" AND ");
         assertEquals("Use dummy nano clock", line2Parts[2]);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
index 0f406cd..afdfd15 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
@@ -16,14 +16,6 @@
  */
 package org.apache.logging.log4j.core.impl;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -51,10 +43,11 @@ import org.apache.logging.log4j.util.FilteredObjectInputStream;
 import org.apache.logging.log4j.util.SortedArrayStringMap;
 import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 public class Log4jLogEventTest {
 
@@ -75,12 +68,12 @@ public class Log4jLogEventTest {
         }
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void beforeClass() {
         System.setProperty(ClockFactory.PROPERTY_NAME, FixedTimeClock.class.getName());
     }
 
-    @AfterClass
+    @AfterAll
     public static void afterClass() throws IllegalAccessException {
         ClockFactoryTest.resetClocks();
     }
@@ -88,15 +81,15 @@ public class Log4jLogEventTest {
     @Test
     public void testToImmutableSame() {
         final LogEvent logEvent = new Log4jLogEvent();
-        Assert.assertSame(logEvent, logEvent.toImmutable());
+        assertSame(logEvent, logEvent.toImmutable());
     }
 
     @Test
     public void testToImmutableNotSame() {
         final LogEvent logEvent = new Log4jLogEvent.Builder().setMessage(new ReusableObjectMessage()).build();
         final LogEvent immutable = logEvent.toImmutable();
-        Assert.assertSame(logEvent, immutable);
-        Assert.assertFalse(immutable.getMessage() instanceof ReusableMessage);
+        assertSame(logEvent, immutable);
+        assertFalse(immutable.getMessage() instanceof ReusableMessage);
     }
 
     @Test
@@ -210,7 +203,7 @@ public class Log4jLogEventTest {
         assertEquals(marker, evt2.getMarker());
         assertEquals(msg, evt2.getMessage());
         assertEquals(threadName, evt2.getThreadName());
-        assertEquals(null, evt2.getThrown());
+        assertNull(evt2.getThrown());
         assertEquals(this.getClass().getName() + "$DeletedException", evt2.getThrownProxy().getName());
         assertEquals(errorMessage, evt2.getThrownProxy().getMessage());
     }
@@ -231,7 +224,7 @@ public class Log4jLogEventTest {
     @Test
     public void testInitiallyDummyNanoClock() {
         assertTrue(Log4jLogEvent.getNanoClock() instanceof DummyNanoClock);
-        assertEquals("initial dummy nanotime", 0, Log4jLogEvent.getNanoClock().nanoTime());
+        assertEquals(0, Log4jLogEvent.getNanoClock().nanoTime(), "initial dummy nanotime");
     }
 
     @Test
@@ -245,9 +238,9 @@ public class Log4jLogEventTest {
     private void verifyNanoTimeWithAllConstructors(final long expected) {
         assertEquals(expected, Log4jLogEvent.getNanoClock().nanoTime());
 
-        assertEquals("No-arg constructor", expected, new Log4jLogEvent().getNanoTime());
-        assertEquals("7-arg constructor", expected, new Log4jLogEvent("l", null, "a", null, null, null, null)
-                .getNanoTime());
+        assertEquals(expected, new Log4jLogEvent().getNanoTime(), "No-arg constructor");
+        assertEquals(expected, new Log4jLogEvent("l", null, "a", null, null, null, null)
+                .getNanoTime(), "7-arg constructor");
     }
 
     @Test
@@ -281,8 +274,8 @@ public class Log4jLogEventTest {
 
         assertEquals(contextData, event.getContextData());
         assertSame(contextStack, event.getContextStack());
-        assertEquals(true, event.isEndOfBatch());
-        assertEquals(true, event.isIncludeLocation());
+        assertTrue(event.isEndOfBatch());
+        assertTrue(event.isIncludeLocation());
         assertSame(Level.FATAL, event.getLevel());
         assertSame(fqcn, event.getLoggerFqcn());
         assertSame(name, event.getLoggerName());
@@ -295,8 +288,8 @@ public class Log4jLogEventTest {
         assertEquals(987654321L, event.getTimeMillis());
 
         final LogEvent event2 = new Log4jLogEvent.Builder(event).build();
-        assertEquals("copy constructor builder", event2, event);
-        assertEquals("same hashCode", event2.hashCode(), event.hashCode());
+        assertEquals(event2, event, "copy constructor builder");
+        assertEquals(event2.hashCode(), event.hashCode(), "same hashCode");
     }
 
     @Test
@@ -330,8 +323,8 @@ public class Log4jLogEventTest {
 
         assertSame(contextData, event.getContextData());
         assertSame(contextStack, event.getContextStack());
-        assertEquals(true, event.isEndOfBatch());
-        assertEquals(true, event.isIncludeLocation());
+        assertTrue(event.isEndOfBatch());
+        assertTrue(event.isIncludeLocation());
         assertSame(Level.FATAL, event.getLevel());
         assertSame(fqcn, event.getLoggerFqcn());
         assertSame(name, event.getLoggerName());
@@ -344,8 +337,8 @@ public class Log4jLogEventTest {
         assertEquals(987654321L, event.getTimeMillis());
 
         final LogEvent event2 = new Log4jLogEvent.Builder(event).build();
-        assertEquals("copy constructor builder", event2, event);
-        assertEquals("same hashCode", event2.hashCode(), event.hashCode());
+        assertEquals(event2, event, "copy constructor builder");
+        assertEquals(event2.hashCode(), event.hashCode(), "same hashCode");
     }
 
     @Test
@@ -378,8 +371,8 @@ public class Log4jLogEventTest {
 
         assertSame(contextData, event.getContextData());
         assertSame(contextStack, event.getContextStack());
-        assertEquals(true, event.isEndOfBatch());
-        assertEquals(true, event.isIncludeLocation());
+        assertTrue(event.isEndOfBatch());
+        assertTrue(event.isIncludeLocation());
         assertSame(Level.FATAL, event.getLevel());
         assertSame(fqcn, event.getLoggerFqcn());
         assertSame(name, event.getLoggerName());
@@ -394,8 +387,8 @@ public class Log4jLogEventTest {
         final LogEvent e2 = new Log4jLogEvent.Builder(event).build();
         assertEquals(contextData, e2.getContextData());
         assertSame(contextStack, e2.getContextStack());
-        assertEquals(true, e2.isEndOfBatch());
-        assertEquals(true, e2.isIncludeLocation());
+        assertTrue(e2.isEndOfBatch());
+        assertTrue(e2.isIncludeLocation());
         assertSame(Level.FATAL, e2.getLevel());
         assertSame(fqcn, e2.getLoggerFqcn());
         assertSame(name, e2.getLoggerName());
@@ -412,7 +405,7 @@ public class Log4jLogEventTest {
         final Field fieldSource = Log4jLogEvent.class.getDeclaredField("source");
         fieldSource.setAccessible(true);
         final Object value = fieldSource.get(e2);
-        assertNull("source in copy", value);
+        assertNull(value, "source in copy");
     }
 
     @SuppressWarnings("deprecation")
@@ -448,8 +441,8 @@ public class Log4jLogEventTest {
 
         assertEquals(contextData, event.getContextData());
         assertSame(contextStack, event.getContextStack());
-        assertEquals(true, event.isEndOfBatch());
-        assertEquals(true, event.isIncludeLocation());
+        assertTrue(event.isEndOfBatch());
+        assertTrue(event.isIncludeLocation());
         assertSame(Level.FATAL, event.getLevel());
         assertSame(fqcn, event.getLoggerFqcn());
         assertSame(name, event.getLoggerName());
@@ -462,13 +455,13 @@ public class Log4jLogEventTest {
         assertEquals(987654321L, event.getTimeMillis());
 
         final LogEvent event2 = builder(event).build();
-        assertEquals("copy constructor builder", event2, event);
-        assertEquals("same hashCode", event2.hashCode(), event.hashCode());
+        assertEquals(event2, event, "copy constructor builder");
+        assertEquals(event2.hashCode(), event.hashCode(), "same hashCode");
 
         assertEquals(contextData, event2.getContextData());
         assertSame(contextStack, event2.getContextStack());
-        assertEquals(true, event2.isEndOfBatch());
-        assertEquals(true, event2.isIncludeLocation());
+        assertTrue(event2.isEndOfBatch());
+        assertTrue(event2.isIncludeLocation());
         assertSame(Level.FATAL, event2.getLevel());
         assertSame(fqcn, event2.getLoggerFqcn());
         assertSame(name, event2.getLoggerName());
@@ -499,21 +492,13 @@ public class Log4jLogEventTest {
         different("null fqcn", builder(event).setLoggerFqcn(null), event);
 
         different("different name", builder(event).setLoggerName("different"), event);
-        try { // TODO null logger name throws NPE in equals. Use Objects.requireNonNull in constructor?
-            different("null name", builder(event).setLoggerName(null), event);
-            fail("Expected NullPointerException");
-        } catch (final NullPointerException ok) {
-        }
+        assertThrows(NullPointerException.class, () -> different("null name", builder(event).setLoggerName(null), event));
 
         different("different marker", builder(event).setMarker(MarkerManager.getMarker("different")), event);
         different("null marker", builder(event).setMarker(null), event);
 
         different("different message", builder(event).setMessage(new ObjectMessage("different")), event);
-        try { // TODO null message throws NPE in equals(). Use Objects.requireNonNull in constructor?
-            different("null message", builder(event).setMessage(null), event);
-            fail("Expected NullPointerException");
-        } catch (final NullPointerException ok) {
-        }
+        assertThrows(NullPointerException.class, () -> different("null message", builder(event).setMessage(null), event));
 
         different("different nanoTime", builder(event).setNanoTime(135), event);
         different("different milliTime", builder(event).setTimeMillis(137), event);
@@ -535,8 +520,8 @@ public class Log4jLogEventTest {
 
     private void different(final String reason, final Log4jLogEvent.Builder builder, final LogEvent event) {
         final LogEvent other = builder.build();
-        assertNotEquals(reason, other, event);
-        assertNotEquals(reason + " hashCode", other.hashCode(), event.hashCode());
+        assertNotEquals(other, event, reason);
+        assertNotEquals(other.hashCode(), event.hashCode(), reason + " hashCode");
     }
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
index 7e94ca6..f7f5478 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
@@ -37,11 +37,10 @@ import org.apache.logging.log4j.util.FilteredObjectInputStream;
 import org.apache.logging.log4j.util.SortedArrayStringMap;
 import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.spi.MutableThreadContextStack;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the MutableLogEvent class.
@@ -59,7 +58,7 @@ public class MutableLogEventTest {
         return result;
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setupClass() {
         try {
             Class.forName("java.io.ObjectInputFilter");
@@ -72,7 +71,7 @@ public class MutableLogEventTest {
     @Test
     public void testToImmutable() {
         final LogEvent logEvent = new MutableLogEvent();
-        Assert.assertNotSame(logEvent, logEvent.toImmutable());
+        assertNotSame(logEvent, logEvent.toImmutable());
     }
 
     @Test
@@ -96,23 +95,23 @@ public class MutableLogEventTest {
                 .build();
         final MutableLogEvent mutable = new MutableLogEvent();
         mutable.initFrom(source);
-        assertEquals("contextMap", CONTEXT_DATA, mutable.getContextData());
-        assertEquals("stack", STACK, mutable.getContextStack());
-        assertEquals("endOfBatch", true, mutable.isEndOfBatch());
-        assertEquals("IncludeLocation()", true, mutable.isIncludeLocation());
-        assertEquals("level", Level.FATAL, mutable.getLevel());
-        assertEquals("LoggerFqcn()", source.getLoggerFqcn(), mutable.getLoggerFqcn());
-        assertEquals("LoggerName", source.getLoggerName(), mutable.getLoggerName());
-        assertEquals("marker", source.getMarker(), mutable.getMarker());
-        assertEquals("msg", source.getMessage(), mutable.getMessage());
-        assertEquals("nano", source.getNanoTime(), mutable.getNanoTime());
-        assertEquals("src", source.getSource(), mutable.getSource());
-        assertEquals("tid", source.getThreadId(), mutable.getThreadId());
-        assertEquals("tname", source.getThreadName(), mutable.getThreadName());
-        assertEquals("tpriority", source.getThreadPriority(), mutable.getThreadPriority());
-        assertEquals("throwns", source.getThrown(), mutable.getThrown());
-        assertEquals("proxy", source.getThrownProxy(), mutable.getThrownProxy());
-        assertEquals("millis", source.getTimeMillis(), mutable.getTimeMillis());
+        assertEquals(CONTEXT_DATA, mutable.getContextData(), "contextMap");
+        assertEquals(STACK, mutable.getContextStack(), "stack");
+        assertTrue(mutable.isEndOfBatch(), "endOfBatch");
+        assertTrue(mutable.isIncludeLocation(), "IncludeLocation()");
+        assertEquals(Level.FATAL, mutable.getLevel(), "level");
+        assertEquals(source.getLoggerFqcn(), mutable.getLoggerFqcn(), "LoggerFqcn()");
+        assertEquals(source.getLoggerName(), mutable.getLoggerName(), "LoggerName");
+        assertEquals(source.getMarker(), mutable.getMarker(), "marker");
+        assertEquals(source.getMessage(), mutable.getMessage(), "msg");
+        assertEquals(source.getNanoTime(), mutable.getNanoTime(), "nano");
+        assertEquals(source.getSource(), mutable.getSource(), "src");
+        assertEquals(source.getThreadId(), mutable.getThreadId(), "tid");
+        assertEquals(source.getThreadName(), mutable.getThreadName(), "tname");
+        assertEquals(source.getThreadPriority(), mutable.getThreadPriority(), "tpriority");
+        assertEquals(source.getThrown(), mutable.getThrown(), "throwns");
+        assertEquals(source.getThrownProxy(), mutable.getThrownProxy(), "proxy");
+        assertEquals(source.getTimeMillis(), mutable.getTimeMillis(), "millis");
     }
 
     @Test
@@ -136,23 +135,23 @@ public class MutableLogEventTest {
                 .build();
         final MutableLogEvent mutable = new MutableLogEvent();
         mutable.initFrom(source);
-        assertEquals("format", "msg in a {}", mutable.getFormat());
-        assertEquals("formatted", "msg in a bottle", mutable.getFormattedMessage());
-        assertEquals("parameters", new String[] {"bottle"}, mutable.getParameters());
+        assertEquals("msg in a {}", mutable.getFormat(), "format");
+        assertEquals("msg in a bottle", mutable.getFormattedMessage(), "formatted");
+        assertArrayEquals(new String[] {"bottle"}, mutable.getParameters(), "parameters");
         Message memento = mutable.memento();
-        assertEquals("format", "msg in a {}", memento.getFormat());
-        assertEquals("formatted", "msg in a bottle", memento.getFormattedMessage());
-        assertEquals("parameters", new String[] {"bottle"}, memento.getParameters());
+        assertEquals("msg in a {}", memento.getFormat(), "format");
+        assertEquals("msg in a bottle", memento.getFormattedMessage(), "formatted");
+        assertArrayEquals(new String[] {"bottle"}, memento.getParameters(), "parameters");
 
         Message eventMementoMessage = mutable.createMemento().getMessage();
-        assertEquals("format", "msg in a {}", eventMementoMessage.getFormat());
-        assertEquals("formatted", "msg in a bottle", eventMementoMessage.getFormattedMessage());
-        assertEquals("parameters", new String[] {"bottle"}, eventMementoMessage.getParameters());
+        assertEquals("msg in a {}", eventMementoMessage.getFormat(), "format");
+        assertEquals("msg in a bottle", eventMementoMessage.getFormattedMessage(), "formatted");
+        assertArrayEquals(new String[] {"bottle"}, eventMementoMessage.getParameters(), "parameters");
 
         Message log4JLogEventMessage = new Log4jLogEvent.Builder(mutable).build().getMessage();
-        assertEquals("format", "msg in a {}", log4JLogEventMessage.getFormat());
-        assertEquals("formatted", "msg in a bottle", log4JLogEventMessage.getFormattedMessage());
-        assertEquals("parameters", new String[] {"bottle"}, log4JLogEventMessage.getParameters());
+        assertEquals("msg in a {}", log4JLogEventMessage.getFormat(), "format");
+        assertEquals("msg in a bottle", log4JLogEventMessage.getFormattedMessage(), "formatted");
+        assertArrayEquals(new String[] {"bottle"}, log4JLogEventMessage.getParameters(), "parameters");
     }
 
     @Test
@@ -178,13 +177,13 @@ public class MutableLogEventTest {
                 .build();
         final MutableLogEvent mutable = new MutableLogEvent();
         mutable.initFrom(source);
-        assertNull("format", mutable.getFormat());
-        assertEquals("formatted", param.toString(), mutable.getFormattedMessage());
-        assertEquals("parameters", new Object[] {param}, mutable.getParameters());
+        assertNull(mutable.getFormat(), "format");
+        assertEquals(param.toString(), mutable.getFormattedMessage(), "formatted");
+        assertArrayEquals(new Object[] {param}, mutable.getParameters(), "parameters");
         Message memento = mutable.memento();
-        assertNull("format", memento.getFormat());
-        assertEquals("formatted", param.toString(), memento.getFormattedMessage());
-        assertEquals("parameters", new Object[] {param}, memento.getParameters());
+        assertNull(memento.getFormat(), "format");
+        assertEquals(param.toString(), memento.getFormattedMessage(), "formatted");
+        assertArrayEquals(new Object[] {param}, memento.getParameters(), "parameters");
     }
 
     @Test
@@ -194,24 +193,24 @@ public class MutableLogEventTest {
         ReusableSimpleMessage simpleMessage = new ReusableSimpleMessage();
         simpleMessage.set("");
         mutable.setMessage(simpleMessage);
-        assertEquals("context data", 0, mutable.getContextData().size());
-        assertNull("context stack", mutable.getContextStack());
-        assertFalse("end of batch", mutable.isEndOfBatch());
-        assertFalse("incl loc", mutable.isIncludeLocation());
-        assertSame("level", Level.OFF, mutable.getLevel());
-        assertNull("fqcn", mutable.getLoggerFqcn());
-        assertNull("logger", mutable.getLoggerName());
-        assertNull("marker", mutable.getMarker());
-        assertEquals("msg", mutable, mutable.getMessage());
-        assertEquals("nanoTm", 0, mutable.getNanoTime());
-        assertEquals("tid", 0, mutable.getThreadId());
-        assertNull("tname", mutable.getThreadName());
-        assertEquals("tpriority", 0, mutable.getThreadPriority());
-        assertNull("thrwn", mutable.getThrown());
-        assertEquals("timeMs", 0, mutable.getTimeMillis());
-
-        assertNull("source", mutable.getSource());
-        assertNull("thrownProxy", mutable.getThrownProxy());
+        assertEquals(0, mutable.getContextData().size(), "context data");
+        assertNull(mutable.getContextStack(), "context stack");
+        assertFalse(mutable.isEndOfBatch(), "end of batch");
+        assertFalse(mutable.isIncludeLocation(), "incl loc");
+        assertSame(Level.OFF, mutable.getLevel(), "level");
+        assertNull(mutable.getLoggerFqcn(), "fqcn");
+        assertNull(mutable.getLoggerName(), "logger");
+        assertNull(mutable.getMarker(), "marker");
+        assertEquals(mutable, mutable.getMessage(), "msg");
+        assertEquals(0, mutable.getNanoTime(), "nanoTm");
+        assertEquals(0, mutable.getThreadId(), "tid");
+        assertNull(mutable.getThreadName(), "tname");
+        assertEquals(0, mutable.getThreadPriority(), "tpriority");
+        assertNull(mutable.getThrown(), "thrwn");
+        assertEquals(0, mutable.getTimeMillis(), "timeMs");
+
+        assertNull(mutable.getSource(), "source");
+        assertNull(mutable.getThrownProxy(), "thrownProxy");
 
         mutable.setContextData(CONTEXT_DATA);
         mutable.setContextStack(STACK);
@@ -229,47 +228,47 @@ public class MutableLogEventTest {
         mutable.setThrown(new Exception());
         mutable.setTimeMillis(56789);
 
-        assertNotNull("context stack", mutable.getContextStack());
-        assertTrue("end of batch", mutable.isEndOfBatch());
-        assertTrue("incl loc", mutable.isIncludeLocation());
-        assertNotNull("level", mutable.getLevel());
-        assertNotNull("fqcn", mutable.getLoggerFqcn());
-        assertNotNull("logger", mutable.getLoggerName());
-        assertNotNull("marker", mutable.getMarker());
-        assertEquals("msg", new ParameterizedMessage("message in a {}", "bottle"), mutable.getMessage());
-        assertNotEquals("nanoTm", 0, mutable.getNanoTime());
-        assertNotEquals("tid", 0, mutable.getThreadId());
-        assertNotNull("tname", mutable.getThreadName());
-        assertNotEquals("tpriority", 0, mutable.getThreadPriority());
-        assertNotNull("thrwn", mutable.getThrown());
-        assertNotEquals("timeMs", 0, mutable.getTimeMillis());
-
-        assertNotNull("source", mutable.getSource());
-        assertNotNull("thrownProxy", mutable.getThrownProxy());
+        assertNotNull(mutable.getContextStack(), "context stack");
+        assertTrue(mutable.isEndOfBatch(), "end of batch");
+        assertTrue(mutable.isIncludeLocation(), "incl loc");
+        assertNotNull(mutable.getLevel(), "level");
+        assertNotNull(mutable.getLoggerFqcn(), "fqcn");
+        assertNotNull(mutable.getLoggerName(), "logger");
+        assertNotNull(mutable.getMarker(), "marker");
+        assertEquals(new ParameterizedMessage("message in a {}", "bottle"), mutable.getMessage(), "msg");
+        assertNotEquals(0, mutable.getNanoTime(), "nanoTm");
+        assertNotEquals(0, mutable.getThreadId(), "tid");
+        assertNotNull(mutable.getThreadName(), "tname");
+        assertNotEquals(0, mutable.getThreadPriority(), "tpriority");
+        assertNotNull(mutable.getThrown(), "thrwn");
+        assertNotEquals(0, mutable.getTimeMillis(), "timeMs");
+
+        assertNotNull(mutable.getSource(), "source");
+        assertNotNull(mutable.getThrownProxy(), "thrownProxy");
 
         mutable.clear();
-        assertEquals("context map", 0, mutable.getContextData().size());
-        assertNull("context stack", mutable.getContextStack());
-        assertSame("level", Level.OFF, mutable.getLevel());
-        assertNull("fqcn", mutable.getLoggerFqcn());
-        assertNull("logger", mutable.getLoggerName());
-        assertNull("marker", mutable.getMarker());
-        assertEquals("msg", mutable, mutable.getMessage());
-        assertNull("thrwn", mutable.getThrown());
-
-        assertNull("source", mutable.getSource());
-        assertNull("thrownProxy", mutable.getThrownProxy());
+        assertEquals(0, mutable.getContextData().size(), "context map");
+        assertNull(mutable.getContextStack(), "context stack");
+        assertSame(Level.OFF, mutable.getLevel(), "level");
+        assertNull(mutable.getLoggerFqcn(), "fqcn");
+        assertNull(mutable.getLoggerName(), "logger");
+        assertNull(mutable.getMarker(), "marker");
+        assertEquals(mutable, mutable.getMessage(), "msg");
+        assertNull(mutable.getThrown(), "thrwn");
+
+        assertNull(mutable.getSource(), "source");
+        assertNull(mutable.getThrownProxy(), "thrownProxy");
 
         // primitive fields are NOT reset:
-        assertTrue("end of batch", mutable.isEndOfBatch());
-        assertTrue("incl loc", mutable.isIncludeLocation());
-        assertNotEquals("nanoTm", 0, mutable.getNanoTime());
-        assertNotEquals("timeMs", 0, mutable.getTimeMillis());
+        assertTrue(mutable.isEndOfBatch(), "end of batch");
+        assertTrue(mutable.isIncludeLocation(), "incl loc");
+        assertNotEquals(0, mutable.getNanoTime(), "nanoTm");
+        assertNotEquals(0, mutable.getTimeMillis(), "timeMs");
 
         // thread-local fields are NOT reset:
-        assertNotEquals("tid", 0, mutable.getThreadId());
-        assertNotNull("tname", mutable.getThreadName());
-        assertNotEquals("tpriority", 0, mutable.getThreadPriority());
+        assertNotEquals(0, mutable.getThreadId(), "tid");
+        assertNotNull(mutable.getThreadName(), "tname");
+        assertNotEquals(0, mutable.getThreadPriority(), "tpriority");
     }
 
     @Test
@@ -316,7 +315,6 @@ public class MutableLogEventTest {
 
     @Test
     public void testJavaIoSerializableWithThrown() throws Exception {
-        new InternalError("test error");
         final MutableLogEvent evt = new MutableLogEvent();
         evt.setContextData(CONTEXT_DATA);
         evt.setContextStack(STACK);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java
index 75b9287..2994369 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java
@@ -20,9 +20,9 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the ReusableLogEventFactory class.
@@ -57,20 +57,20 @@ public class ReusableLogEventFactoryTest {
     public void testCreateEventOverwritesFields() throws Exception {
         final ReusableLogEventFactory factory = new ReusableLogEventFactory();
         final LogEvent event1 = callCreateEvent(factory, "a", Level.DEBUG, new SimpleMessage("abc"), null);
-        assertEquals("logger", "a", event1.getLoggerName());
-        assertEquals("level", Level.DEBUG, event1.getLevel());
-        assertEquals("msg", new SimpleMessage("abc"), event1.getMessage());
+        assertEquals("a", event1.getLoggerName(), "logger");
+        assertEquals(Level.DEBUG, event1.getLevel(), "level");
+        assertEquals(new SimpleMessage("abc"), event1.getMessage(), "msg");
 
         ReusableLogEventFactory.release(event1);
         final LogEvent event2 = callCreateEvent(factory, "b", Level.INFO, new SimpleMessage("xyz"), null);
         assertSame(event1, event2);
 
-        assertEquals("logger", "b", event1.getLoggerName());
-        assertEquals("level", Level.INFO, event1.getLevel());
-        assertEquals("msg", new SimpleMessage("xyz"), event1.getMessage());
-        assertEquals("logger", "b", event2.getLoggerName());
-        assertEquals("level", Level.INFO, event2.getLevel());
-        assertEquals("msg", new SimpleMessage("xyz"), event2.getMessage());
+        assertEquals("b", event1.getLoggerName(), "logger");
+        assertEquals(Level.INFO, event1.getLevel(), "level");
+        assertEquals(new SimpleMessage("xyz"), event1.getMessage(), "msg");
+        assertEquals("b", event2.getLoggerName(), "logger");
+        assertEquals(Level.INFO, event2.getLevel(), "level");
+        assertEquals(new SimpleMessage("xyz"), event2.getMessage(), "msg");
     }
 
     private LogEvent callCreateEvent(final ReusableLogEventFactory factory, final String logger, final Level level,
@@ -102,17 +102,17 @@ public class ReusableLogEventFactoryTest {
         assertNotNull(event1[0]);
         assertNotNull(event2[0]);
         assertNotSame(event1[0], event2[0]);
-        assertEquals("logger", "a", event1[0].getLoggerName());
-        assertEquals("level", Level.DEBUG, event1[0].getLevel());
-        assertEquals("msg", new SimpleMessage("abc"), event1[0].getMessage());
-        assertEquals("thread name", "THREAD 1", event1[0].getThreadName());
-        assertEquals("tid", t1.getId(), event1[0].getThreadId());
+        assertEquals("a", event1[0].getLoggerName(), "logger");
+        assertEquals(Level.DEBUG, event1[0].getLevel(), "level");
+        assertEquals(new SimpleMessage("abc"), event1[0].getMessage(), "msg");
+        assertEquals("THREAD 1", event1[0].getThreadName(), "thread name");
+        assertEquals(t1.getId(), event1[0].getThreadId(), "tid");
 
-        assertEquals("logger", "b", event2[0].getLoggerName());
-        assertEquals("level", Level.INFO, event2[0].getLevel());
-        assertEquals("msg", new SimpleMessage("xyz"), event2[0].getMessage());
-        assertEquals("thread name", "Thread 2", event2[0].getThreadName());
-        assertEquals("tid", t2.getId(), event2[0].getThreadId());
+        assertEquals("b", event2[0].getLoggerName(), "logger");
+        assertEquals(Level.INFO, event2[0].getLevel(), "level");
+        assertEquals(new SimpleMessage("xyz"), event2[0].getMessage(), "msg");
+        assertEquals("Thread 2", event2[0].getThreadName(), "thread name");
+        assertEquals(t2.getId(), event2[0].getThreadId(), "tid");
         ReusableLogEventFactory.release(event1[0]);
         ReusableLogEventFactory.release(event2[0]);
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableFormatOptionsTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableFormatOptionsTest.java
index d099da1..e94ba4d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableFormatOptionsTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableFormatOptionsTest.java
@@ -16,10 +16,8 @@
  */
 package org.apache.logging.log4j.core.impl;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -27,8 +25,9 @@ import org.apache.logging.log4j.core.pattern.JAnsiTextRenderer;
 import org.apache.logging.log4j.core.pattern.TextRenderer;
 import org.apache.logging.log4j.util.Strings;
 import org.fusesource.jansi.AnsiRenderer.Code;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Unit tests for {@code ThrowableFormatOptions}.
@@ -50,15 +49,15 @@ public final class ThrowableFormatOptionsTest {
     private static ThrowableFormatOptions test(final String[] options, final int expectedLines,
             final String expectedSeparator, final List<String> expectedPackages) {
         final ThrowableFormatOptions tfo = ThrowableFormatOptions.newInstance(options);
-        assertEquals("getLines", expectedLines, tfo.getLines());
-        assertEquals("getSeparator", expectedSeparator, tfo.getSeparator());
-        assertEquals("getPackages", expectedPackages, tfo.getIgnorePackages());
-        assertEquals("allLines", expectedLines == Integer.MAX_VALUE, tfo.allLines());
-        assertEquals("anyLines", expectedLines != 0, tfo.anyLines());
-        assertEquals("minLines", 0, tfo.minLines(0));
-        assertEquals("minLines", expectedLines, tfo.minLines(Integer.MAX_VALUE));
-        assertEquals("hasPackages", expectedPackages != null && !expectedPackages.isEmpty(), tfo.hasPackages());
-        assertNotNull("toString", tfo.toString());
+        assertEquals(expectedLines, tfo.getLines(), "getLines");
+        assertEquals(expectedSeparator, tfo.getSeparator(), "getSeparator");
+        assertEquals(expectedPackages, tfo.getIgnorePackages(), "getPackages");
+        assertEquals(expectedLines == Integer.MAX_VALUE, tfo.allLines(), "allLines");
+        assertEquals(expectedLines != 0, tfo.anyLines(), "anyLines");
+        assertEquals(0, tfo.minLines(0), "minLines");
+        assertEquals(expectedLines, tfo.minLines(Integer.MAX_VALUE), "minLines");
+        assertEquals(expectedPackages != null && !expectedPackages.isEmpty(), tfo.hasPackages(), "hasPackages");
+        assertNotNull(tfo.toString(), "toString");
         return tfo;
     }
 
@@ -124,13 +123,13 @@ public final class ThrowableFormatOptionsTest {
 
     private void testFullAnsiEmptyConfig(final ThrowableFormatOptions tfo) {
         final TextRenderer textRenderer = tfo.getTextRenderer();
-        Assert.assertNotNull(textRenderer);
-        Assert.assertTrue(textRenderer instanceof JAnsiTextRenderer);
+        assertNotNull(textRenderer);
+        assertTrue(textRenderer instanceof JAnsiTextRenderer);
         final JAnsiTextRenderer jansiRenderer = (JAnsiTextRenderer) textRenderer;
         final Map<String, Code[]> styleMap = jansiRenderer.getStyleMap();
         // We have defaults
-        Assert.assertFalse(styleMap.isEmpty());
-        Assert.assertNotNull(styleMap.get("Name"));
+        assertFalse(styleMap.isEmpty());
+        assertNotNull(styleMap.get("Name"));
     }
 
     /**
@@ -141,11 +140,11 @@ public final class ThrowableFormatOptionsTest {
         final ThrowableFormatOptions tfo = test(new String[] { "full", "ansi(Warning=red)" },
                 Integer.MAX_VALUE, Strings.LINE_SEPARATOR, null);
         final TextRenderer textRenderer = tfo.getTextRenderer();
-        Assert.assertNotNull(textRenderer);
-        Assert.assertTrue(textRenderer instanceof JAnsiTextRenderer);
+        assertNotNull(textRenderer);
+        assertTrue(textRenderer instanceof JAnsiTextRenderer);
         final JAnsiTextRenderer jansiRenderer = (JAnsiTextRenderer) textRenderer;
         final Map<String, Code[]> styleMap = jansiRenderer.getStyleMap();
-        Assert.assertArrayEquals(new Code[] { Code.RED }, styleMap.get("Warning"));
+        assertArrayEquals(new Code[] { Code.RED }, styleMap.get("Warning"));
     }
 
     /**
@@ -156,13 +155,13 @@ public final class ThrowableFormatOptionsTest {
         final ThrowableFormatOptions tfo = test(new String[] { "full", "ansi(Warning=red Key=blue Value=cyan)" },
                 Integer.MAX_VALUE, Strings.LINE_SEPARATOR, null);
         final TextRenderer textRenderer = tfo.getTextRenderer();
-        Assert.assertNotNull(textRenderer);
-        Assert.assertTrue(textRenderer instanceof JAnsiTextRenderer);
+        assertNotNull(textRenderer);
+        assertTrue(textRenderer instanceof JAnsiTextRenderer);
         final JAnsiTextRenderer jansiRenderer = (JAnsiTextRenderer) textRenderer;
         final Map<String, Code[]> styleMap = jansiRenderer.getStyleMap();
-        Assert.assertArrayEquals(new Code[] { Code.RED }, styleMap.get("Warning"));
-        Assert.assertArrayEquals(new Code[] { Code.BLUE }, styleMap.get("Key"));
-        Assert.assertArrayEquals(new Code[] { Code.CYAN }, styleMap.get("Value"));
+        assertArrayEquals(new Code[] { Code.RED }, styleMap.get("Warning"));
+        assertArrayEquals(new Code[] { Code.BLUE }, styleMap.get("Key"));
+        assertArrayEquals(new Code[] { Code.CYAN }, styleMap.get("Value"));
     }
 
     /**
@@ -174,13 +173,13 @@ public final class ThrowableFormatOptionsTest {
                 new String[] { "full", "ansi(Warning=red Key=blue,bg_red Value=cyan,bg_black,underline)" }, Integer.MAX_VALUE,
                 Strings.LINE_SEPARATOR, null);
         final TextRenderer textRenderer = tfo.getTextRenderer();
-        Assert.assertNotNull(textRenderer);
-        Assert.assertTrue(textRenderer instanceof JAnsiTextRenderer);
+        assertNotNull(textRenderer);
+        assertTrue(textRenderer instanceof JAnsiTextRenderer);
         final JAnsiTextRenderer jansiRenderer = (JAnsiTextRenderer) textRenderer;
         final Map<String, Code[]> styleMap = jansiRenderer.getStyleMap();
-        Assert.assertArrayEquals(new Code[] { Code.RED }, styleMap.get("Warning"));
-        Assert.assertArrayEquals(new Code[] { Code.BLUE, Code.BG_RED }, styleMap.get("Key"));
-        Assert.assertArrayEquals(new Code[] { Code.CYAN, Code.BG_BLACK, Code.UNDERLINE }, styleMap.get("Value"));
+        assertArrayEquals(new Code[] { Code.RED }, styleMap.get("Warning"));
+        assertArrayEquals(new Code[] { Code.BLUE, Code.BG_RED }, styleMap.get("Key"));
+        assertArrayEquals(new Code[] { Code.CYAN, Code.BG_BLACK, Code.UNDERLINE }, styleMap.get("Value"));
     }
 
     /**
@@ -253,7 +252,8 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testFullAndFiltersAndSeparator() {
-        test(new String[] { "full", "filters(org.junit)", "separator(|)" }, Integer.MAX_VALUE, "|", Arrays.asList("org.junit"));
+        test(new String[] { "full", "filters(org.junit)", "separator(|)" }, Integer.MAX_VALUE, "|",
+                Collections.singletonList("org.junit"));
     }
 
     /**
@@ -286,7 +286,7 @@ public final class ThrowableFormatOptionsTest {
     @Test
     public void testFilters() {
         test(new String[] { "filters(packages)" }, Integer.MAX_VALUE, Strings.LINE_SEPARATOR,
-                Arrays.asList("packages"));
+                Collections.singletonList("packages"));
     }
 
     /**
@@ -312,7 +312,7 @@ public final class ThrowableFormatOptionsTest {
     @Test
     public void testFullAndFilters() {
         test(new String[] { "full", "filters(packages)" }, Integer.MAX_VALUE, Strings.LINE_SEPARATOR,
-                Arrays.asList("packages"));
+                Collections.singletonList("packages"));
     }
 
     /**
@@ -320,7 +320,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testNoneAndFilters() {
-        test(new String[] { "none", "filters(packages)" }, 0, Strings.LINE_SEPARATOR, Arrays.asList("packages"));
+        test(new String[] { "none", "filters(packages)" }, 0, Strings.LINE_SEPARATOR, Collections.singletonList("packages"));
     }
 
     /**
@@ -328,7 +328,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testShortAndFilters() {
-        test(new String[] { "short", "filters(packages)" }, 2, Strings.LINE_SEPARATOR, Arrays.asList("packages"));
+        test(new String[] { "short", "filters(packages)" }, 2, Strings.LINE_SEPARATOR, Collections.singletonList("packages"));
     }
 
     /**
@@ -336,7 +336,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testDepthAndFilters() {
-        test(new String[] { "10", "filters(packages)" }, 10, Strings.LINE_SEPARATOR, Arrays.asList("packages"));
+        test(new String[] { "10", "filters(packages)" }, 10, Strings.LINE_SEPARATOR, Collections.singletonList("packages"));
     }
 
     /**
@@ -345,7 +345,7 @@ public final class ThrowableFormatOptionsTest {
     @Test
     public void testFullAndSeparatorAndFilter() {
         test(new String[] { "full", "separator(|)", "filters(packages)" }, Integer.MAX_VALUE, "|",
-                Arrays.asList("packages"));
+                Collections.singletonList("packages"));
     }
 
     /**
@@ -362,7 +362,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testNoneAndSeparatorAndFilters() {
-        test(new String[] { "none", "separator(|)", "filters(packages)" }, 0, "|", Arrays.asList("packages"));
+        test(new String[] { "none", "separator(|)", "filters(packages)" }, 0, "|", Collections.singletonList("packages"));
     }
 
     /**
@@ -370,7 +370,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testShortAndSeparatorAndFilters() {
-        test(new String[] { "short", "separator(|)", "filters(packages)" }, 2, "|", Arrays.asList("packages"));
+        test(new String[] { "short", "separator(|)", "filters(packages)" }, 2, "|", Collections.singletonList("packages"));
     }
 
     /**
@@ -378,7 +378,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testDepthAndSeparatorAndFilters() {
-        test(new String[] { "10", "separator(|)", "filters(packages)" }, 10, "|", Arrays.asList("packages"));
+        test(new String[] { "10", "separator(|)", "filters(packages)" }, 10, "|", Collections.singletonList("packages"));
     }
 
     /**
@@ -387,7 +387,7 @@ public final class ThrowableFormatOptionsTest {
     @Test
     public void testSingleOptionFullAndFilters() {
         test(new String[] { "full,filters(packages)" }, Integer.MAX_VALUE, Strings.LINE_SEPARATOR,
-                Arrays.asList("packages"));
+                Collections.singletonList("packages"));
     }
 
     /**
@@ -395,7 +395,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testSingleOptionNoneAndFilters() {
-        test(new String[] { "none,filters(packages)" }, 0, Strings.LINE_SEPARATOR, Arrays.asList("packages"));
+        test(new String[] { "none,filters(packages)" }, 0, Strings.LINE_SEPARATOR, Collections.singletonList("packages"));
     }
 
     /**
@@ -403,7 +403,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testSingleOptionShortAndFilters() {
-        test(new String[] { "short,filters(packages)" }, 2, Strings.LINE_SEPARATOR, Arrays.asList("packages"));
+        test(new String[] { "short,filters(packages)" }, 2, Strings.LINE_SEPARATOR, Collections.singletonList("packages"));
     }
 
     /**
@@ -411,7 +411,7 @@ public final class ThrowableFormatOptionsTest {
      */
     @Test
     public void testSingleOptionDepthAndFilters() {
-        test(new String[] { "10,filters(packages)" }, 10, Strings.LINE_SEPARATOR, Arrays.asList("packages"));
+        test(new String[] { "10,filters(packages)" }, 10, Strings.LINE_SEPARATOR, Collections.singletonList("packages"));
     }
 
     /**
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java
index ea22e02..bf8b69d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java
@@ -16,12 +16,6 @@
  */
 package org.apache.logging.log4j.core.impl;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -46,11 +40,13 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.pattern.PlainTextRenderer;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import static org.junit.jupiter.api.Assertions.*;
+
 /**
  *
  */
@@ -121,26 +117,21 @@ public class ThrowableProxyTest {
      */
     @Test
     public void testLogStackTraceWithClassThatCannotInitialize() {
-        try {
-            // Try to create the object, which will always fail during class initialization
-            final AlwaysThrowsError error = new AlwaysThrowsError();
+        final Error e = assertThrows(Error.class, AlwaysThrowsError::new);
+        // Print the stack trace to System.out for informational purposes
+        // System.err.println("### Here's the stack trace that we'll log with log4j ###");
+        // e.printStackTrace();
+        // System.err.println("### End stack trace ###");
 
-            // If the error was not triggered then fail
-            fail("Test did not throw expected error: " + error);
-        } catch (final Throwable e) {
-            // Print the stack trace to System.out for informational purposes
-            // System.err.println("### Here's the stack trace that we'll log with log4j ###");
-            // e.printStackTrace();
-            // System.err.println("### End stack trace ###");
-
-            final Logger logger = LogManager.getLogger(getClass());
+        final Logger logger = LogManager.getLogger(getClass());
 
+        assertDoesNotThrow(() -> {
             // This is the critical portion of the test. The log message must be printed without
             // throwing a java.lang.Error when introspecting the AlwaysThrowError class in the
             // stack trace.
             logger.error(e.getMessage(), e);
             logger.error(e);
-        }
+        });
     }
 
     @Test
@@ -159,11 +150,11 @@ public class ThrowableProxyTest {
                             }
                         }
                     });
-            ServerSocketChannel.open().socket().bind(new InetSocketAddress("localhost", 9300));
-            ServerSocketChannel.open().socket().bind(new InetSocketAddress("localhost", 9300));
-            fail("expected a java.net.BindException");
-        } catch (final BindException e) {
-            new ThrowableProxy(e);
+            final BindException e = assertThrows(BindException.class, () -> {
+                ServerSocketChannel.open().socket().bind(new InetSocketAddress("localhost", 9300));
+                ServerSocketChannel.open().socket().bind(new InetSocketAddress("localhost", 9300));
+            });
+            assertDoesNotThrow(() -> new ThrowableProxy(e));
         } finally {
             // restore the security manager
             System.setSecurityManager(sm);
@@ -199,10 +190,8 @@ public class ThrowableProxyTest {
             final byte[] encrypted = ec.doFinal(raw);
             final Cipher dc = Cipher.getInstance(algorithm);
             dc.init(Cipher.DECRYPT_MODE, generator.generateKey(), algorithmParameterSpec, secureRandom);
-            dc.doFinal(encrypted);
-            fail("expected a javax.crypto.BadPaddingException");
-        } catch (final BadPaddingException e) {
-            new ThrowableProxy(e);
+            final BadPaddingException e = assertThrows(BadPaddingException.class, () -> dc.doFinal(encrypted));
+            assertDoesNotThrow(() -> new ThrowableProxy(e));
         } finally {
             // restore the existing security manager
             System.setSecurityManager(sm);
@@ -300,7 +289,7 @@ public class ThrowableProxyTest {
         final String separator = " | ";
         final String extendedStackTraceAsString = proxy.getExtendedStackTraceAsString(null,
                 PlainTextRenderer.getInstance(), " | ", Strings.EMPTY);
-        assertTrue(extendedStackTraceAsString, allLinesContain(extendedStackTraceAsString, separator));
+        assertTrue(allLinesContain(extendedStackTraceAsString, separator), extendedStackTraceAsString);
     }
 
     @Test
@@ -310,7 +299,7 @@ public class ThrowableProxyTest {
 
         final String suffix = "some suffix";
         final String extendedStackTraceAsString = proxy.getExtendedStackTraceAsString(suffix);
-        assertTrue(extendedStackTraceAsString, lastLineContains(extendedStackTraceAsString, suffix));
+        assertTrue(lastLineContains(extendedStackTraceAsString, suffix), extendedStackTraceAsString);
     }
 
     @Test
@@ -370,7 +359,7 @@ public class ThrowableProxyTest {
         final ThrowableProxy proxy = new ThrowableProxy(throwable);
         final ExtendedStackTraceElement[] callerPackageData = ThrowableProxyHelper.toExtendedStackTrace(proxy, stack, map, null,
                 throwable.getStackTrace());
-        assertNotNull("No package data returned", callerPackageData);
+        assertNotNull(callerPackageData, "No package data returned");
     }
 
     /**